⊗jsSpREESCh 99 of 294 menu

Escaparea caracterelor speciale în expresiile regulate JavaScript

Să presupunem că vrem să facem ca un caracter special să reprezinte el însuși. Pentru aceasta acesta trebuie escapat folosind backslash-ul. Să vedem câteva exemple.

Exemplul

În următorul exemplu, autorul expresiei regulate a vrut ca modelul de căutare să arate astfel: litera 'a', apoi plus '+', apoi litera 'x'. Cu toate acestea, autorul codului nu a escapat simbolul '+' și de aceea modelul de căutare arată de fapt astfel: litera 'a' de una sau mai multe ori, apoi litera 'x':

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

Ca rezultat, în variabilă se va scrie următorul text:

'a+x ! ! !'

Exemplul

Acum autorul a escapat plusul cu backslash. Acum modelul de căutare arată așa cum trebuie: litera 'a', apoi plus '+', apoi litera 'x'.

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

Ca rezultat, în variabilă se va scrie următorul text:

'! ax aax aaax'

Exemplul

În acest exemplu, modelul arată astfel: litera 'a', apoi punctul '.', apoi litera 'x':

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

Ca rezultat, în variabilă se va scrie următorul text:

'! abx azx'

Exemplul

În următorul exemplu, autorul a uitat să escape slash-ul și sub expresia regulată au căzut toate subșirurile, deoarece punctul neescapat reprezintă orice caracter:

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

Ca rezultat, în variabilă se va scrie următorul text:

'! ! !'

Observație

Atenție la faptul că dacă uitați backslash-ul pentru punct (când acesta ar trebui să reprezinte el însuși) - acest lucru s-ar putea să nu fie observat:

'a.x'.replace(/a.x/g, '!'); // va returna '!', așa cum am vrut

Vizual funcționează corect (deoarece punctul reprezintă orice caracter, inclusiv un punct obișnuit '.'). Dar dacă schimbăm șirul în care se fac înlocuirile - vom vedea greșeala noastră:

'a.x abx azx'.replace(/a.x/g, '!'); // va returna '! ! !', dar se aștepta '! abx azx'

Lista caracterelor speciale și a celor obișnuite

Dacă escapați un caracter obișnuit - nu se va întâmpla nimic rău - acesta va reprezenta oricum el însuși. Excepție - cifrele, acestea nu pot fi escapare.

Deseori apare îndoiala dacă un anumit simbol este special. Unii ajung să escapeze toate caracterele suspecte la rând. Cu toate acestea, aceasta este o practică proastă (încarcă expresia regulată cu backslash-uri).

Sunt caractere speciale: $ ^ . * + ? \ / {} [] () |

Nu sunt caractere speciale: @ : , ' " ; - _ = < > % # ~ `& !

Probleme practice

Este dat șirul:

let str = 'a.a aba aea';

Scrieți o expresie regulată care va găsi șirul 'a.a', fără a-l prinde pe celelalte.

Este dat șirul:

let str = '2+3 223 2223';

Scrieți o expresie regulată care va găsi șirul '2+3', fără a-l prinde pe celelalte.

Este dat șirul:

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

Scrieți o expresie regulată care va găsi șirurile '2+3', '2++3', '2+++3', fără a le prinde pe celelalte (+ poate fi orice număr).

Este dat șirul:

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

Scrieți o expresie regulată care va găsi șirurile '23', '2+3', '2++3', '2+++3', fără a le prinde pe celelalte.

Este dat șirul:

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

Scrieți o expresie regulată care va găsi șirurile '*q+', '*qq+', '*qqq+', fără a le prinde pe celelalte.

Este dat șirul:

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

Scrieți o expresie regulată care va găsi șirurile în paranteze pătrate și le va înlocui cu '!'.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge