Ontsnapping van spesiale karakters in JavaScript regulêre uitdrukkings
Gestel ons wil hê dat 'n spesiale karakter homself moet verteenwoordig. Hiervoor moet dit ontsnap word met 'n agteroorskuinsstreep. Kom ons kyk na voorbeelde.
Voorbeeld
In die volgende voorbeeld wou die skrywer van die regulêre uitdrukking dat
die soekpatroon soos volg lyk: letter
'a', dan 'n plus '+', dan
letter 'x'. Die skrywer van die kode
het eger nie die '+'-karakter ontskap nie, en daarom
lyk die soekpatroon in werklikheid so:
letter 'a' een of meer keer, dan
letter 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
As gevolg sal die volgende in die veranderlike weggeskryf word:
'a+x ! ! !'
Voorbeeld
En nou het die skrywer die plus met 'n agteroorskuinsstreep ontskap.
Nou lyk die soekpatroon soos wat dit moet wees: letter 'a', dan plus
'+', dan letter 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
As gevolg sal die volgende in die veranderlike weggeskryf word:
'! ax aax aaax'
Voorbeeld
In hierdie voorbeeld lyk die patroon so: letter
'a', dan punt '.', dan
letter 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
As gevolg sal die volgende in die veranderlike weggeskryf word:
'! abx azx'
Voorbeeld
In die volgende voorbeeld het die skrywer vergeet om die punt te ontskap en die regulêre uitdrukking het alle substringe getref, aangesien 'n ontskapte punt enige karakter verteenwoordig:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
As gevolg sal die volgende in die veranderlike weggeskryf word:
'! ! !'
Opmerking
Let daarop dat as jy die agteroorskuinsstreep vir die punt vergeet (wanneer dit homself moet verteenwoordig) - kan 'n mens dit dalk selfs nie raaksien nie:
'a.x'.replace(/a.x/g, '!'); // sal '!' teruggee, soos ons wou
Visueel werk dit reg (aangesien die punt
enige karakter verteenwoordig, insluitend 'n gewone
punt '.'). Maar as ons die string verander
waarin die vervangings plaasvind - sal ons ons
fout sien:
'a.x abx azx'.replace(/a.x/g, '!'); // sal '! ! !' teruggee, maar ons het '! abx azx' verwag
Lys van spesiale karakters en gewone karakters
As jy 'n gewone karakter ontskap - sal niks erg gebeur nie - dit sal nog steeds homself verteenwoordig. Die uitsondering is syfers, hulle kan nie ontskap word nie.
Daar kom dikwels twyfel, of 'n gegewe karakter spesiaal is. Sommige kom tot die punt waar hulle alle verdagte karakters een na die ander ontskap. Dit is eger 'n slegte praktyk (dit verrommel die regulêre uitdrukking met agteroorskuinsstrepe).
Spesiale karakters is: $ ^ . * + ? \
/ {} [] () |
Nie spesiale karakters is: @ : , ' " ;
- _ = < > % # ~ `& !
Praktiese probleme
Gegee 'n string:
let str = 'a.a aba aea';
Skryf 'n regulêre uitdrukking wat die string
'a.a' sal vind, sonder om die ander te vang.
Gegee 'n string:
let str = '2+3 223 2223';
Skryf 'n regulêre uitdrukking wat die string
'2+3' sal vind, sonder om die ander te vang.
Gegee 'n string:
let str = '23 2+3 2++3 2+++3 345 567';
Skryf 'n regulêre uitdrukking wat die strings
'2+3', '2++3', '2+++3',
sal vind, sonder om die ander te vang (+ kan enige hoeveelheid wees).
Gegee 'n string:
let str = '23 2+3 2++3 2+++3 445 677';
Skryf 'n regulêre uitdrukking wat die strings
'23', '2+3', '2++3',
'2+++3' sal vind, sonder om die ander te vang.
Gegee 'n string:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Skryf 'n regulêre uitdrukking wat die strings
'*q+', '*qq+', '*qqq+',
sal vind, sonder om die ander te vang.
Gegee 'n string:
let str = '[abc] {abc} abc (abc) [abc]';
Skryf 'n regulêre uitdrukking wat die strings
in vierkantige hakies sal vind en hulle vervang met '!'.