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':

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

Tuloksena muuttujaan kirjoitetaan seuraava:

javascript'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'.

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

Tuloksena muuttujaan kirjoitetaan seuraava:

javascript'! ax aax aaax'

Esimerkki

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

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

Tuloksena muuttujaan kirjoitetaan seuraava:

javascript'! 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ä:

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

Tuloksena muuttujaan kirjoitetaan seuraava:

javascript'! ! !'

Huomautus

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

javascript'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:

javascript'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

Задание 1

Annettu merkkijono:

javascriptlet str = 'a.a aba aea';

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

Задание 2

Annettu merkkijono:

javascriptlet str = '2+3 223 2223';

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

Задание 3

Annettu merkkijono:

javascriptlet 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ä).

Задание 4

Annettu merkkijono:

javascriptlet 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.

Задание 5

Annettu merkkijono:

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

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

Задание 6

Annettu merkkijono:

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

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