⊗jsSpREESCh 99 of 294 menu

Erikoismerkkien escapaus JavaScriptin säännöllisissä lausekkeissa

Oletetaan, että haluamme tehdä niin, että erikoismerkki tarkoittaa itseään. Tätä varten sitä täytyy escapata kenoviivalla. Katsotaanpa esimerkein.

Esimerkki

Seuraavassa esimerkissä säännöllisen lausekkeen tekijä halusi, että hakumalli näyttäisi tältä: kirjain 'a', sitten plus '+', sitten kirjain 'x'. Kuitenkin, koodin tekijä ei escapannut merkkiä '+' ja siksi hakumalli itse asiassa näyttää tältä: kirjain 'a' yksi tai useampi kerta, sitten kirjain 'x':

let str = 'a+x ax aax aaax'; let res = str.replace(/a+x/g, '!');

Tuloksena muuttujaan kirjoitetaan seuraava:

'a+x ! ! !'

Esimerkki

Mutta nyt tekijä on escapannut plus-merkin kenoviivalla. Nyt hakumalli näyttää siltä kuin pitääkin: kirjain 'a', sitten plus '+', sitten kirjain 'x'.

let str = 'a+x ax aax aaax'; let res = str.replace(/a\+x/g, '!');

Tuloksena muuttujaan kirjoitetaan seuraava:

'! ax aax aaax'

Esimerkki

Tässä esimerkissä hakumalli näyttää tältä: kirjain 'a', sitten piste '.', sitten kirjain 'x':

let str = 'a.x abx azx'; let res = str.replace(/a\.x/g, '!');

Tuloksena muuttujaan kirjoitetaan seuraava:

'! abx azx'

Esimerkki

Seuraavassa esimerkissä tekijä unohti escapata pisteen ja säännöllinen lauseke löysi kaikki alimerkkijonot, koska escapaaamaton piste tarkoittaa mitä tahansa merkkiä:

let str = 'a.x abx azx'; let res = str.replace(/a.x/g, '!');

Tuloksena muuttujaan kirjoitetaan seuraava:

'! ! !'

Huomautus

Huomaa, että jos unohdat kenoviivan pisteelle (kun sen pitäisi tarkoittaa itseään) - tätä ei välttämättä edes huomaa:

'a.x'.replace(/a.x/g, '!'); // palauttaa '!', kuten halusimmekin

Visuaalisesti se toimii oikein (koska piste tarkoittaa mitä tahansa merkkiä, myös tavallista pistettä '.'). Mutta jos muutetaan merkkijonoa, jossa korvaukset tapahtuvat - näemme virheemme:

'a.x abx azx'.replace(/a.x/g, '!'); // palauttaa '! ! !', odotettiin '! abx azx'

Erikoismerkkien ja tavallisten merkkien lista

Jos escapaa tavallisen merkin - mitään kamalaa ei tapahdu - se tarkoittaa silti itseään. Poikkeus - numerot, niitä ei voi escapata.

Usein herää epäilys, onko tietty merkki erikoinen. Jotkut menevät siihen pisteeseen että escapavat kaikki epäilyttävät merkit peräkkäin. Tämä on kuitenkin huono käytäntö (täyttää säännöllisen lausekkenen kenoviivoilla).

Ovat erikoismerkkejä: $ ^ . * + ? \ / {} [] () |

Eivät ole erikoismerkkejä: @ : , ' " ; - _ = < > % # ~ `& !

Käytännön tehtävät

Annettu merkkijono:

let str = 'a.a aba aea';

Kirjoita säännöllinen lauseke, joka löytää merkkijonon 'a.a', ottaen muita.

Annettu merkkijono:

let str = '2+3 223 2223';

Kirjoita säännöllinen lauseke, joka löytää merkkijonon '2+3', ottaen muita.

Annettu merkkijono:

let str = '23 2+3 2++3 2+++3 345 567';

Kirjoita säännöllinen lauseke, joka löytää merkkijonot '2+3', '2++3', '2+++3', ottaen muita (+ voi olla mikä tahansa määrä).

Annettu merkkijono:

let str = '23 2+3 2++3 2+++3 445 677';

Kirjoita säännöllinen lauseke, joka löytää merkkijonot '23', '2+3', '2++3', '2+++3', ottaen muita.

Annettu merkkijono:

let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';

Kirjoita säännöllinen lauseke, joka löytää merkkijonot '*q+', '*qq+', '*qqq+', ottaen muita.

Annettu merkkijono:

let str = '[abc] {abc} abc (abc) [abc]';

Kirjoita säännöllinen lauseke, joka löytää merkkijonot hakasulkeissa ja korvaa ne '!':lla.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää