Ekranizimi i Simboleve Speciale në Regex JavaScript

Supozoni se duam që simboli special të përfaqësojë vetveten. Për këtë ai duhet të ekranizohet duke përdorur backslash. Le të shohim me shembuj.

Shembull

Në shembullin vijues, autori i regex donte që modeli i kërkimit të dukej kështu: shkronja 'a', pastaj plus '+', pastaj shkronja 'x'. Megjithatë, autori i kodit nuk e ka ekranizuar simbolin '+' dhe për këtë arsye modeli i kërkimit në të vërtetë duket kështu: shkronja 'a' një ose më shumë herë, pastaj shkronja 'x':

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

Si rezultat, në variabël do të shkruhet si më poshtë:

javascript'a+x ! ! !'

Shembull

Tani autori e ka ekranizuar plusin me backslash. Tani modeli i kërkimit duket siç duhet: shkronja 'a', pastaj plus '+', pastaj shkronja 'x'.

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

Si rezultat, në variabël do të shkruhet si më poshtë:

javascript'! ax aax aaax'

Shembull

Në këtë shembull, modeli duket kështu: shkronja 'a', pastaj pikë '.', pastaj shkronja 'x':

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

Si rezultat, në variabël do të shkruhet si më poshtë:

javascript'! abx azx'

Shembull

Në shembullin vijues autori harroi të ekranizonte pikën dhe nën regex ranë të gjitha nënvargjet, sepse pika e paekranizuar përfaqëson çdo simbol:

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

Si rezultat, në variabël do të shkruhet si më poshtë:

javascript'! ! !'

Vërejtje

Kushtojini vëmendje faktit që nëse harroni backslash për pikën (kur ajo duhet të përfaqësojë vetveten) - kjo mund edhe të mos vihet re:

javascript'a.x'.replace(/a.x/g, '!'); // kthen '!', siç donim

Vizualisht funksionon si duhet (pasi pika përfaqëson çdo simbol, përfshirë edhe pikën e zakonshme '.'). Por nëse ndryshojmë vargun, ku ndodhin zëvendësimet - do të shohim gabimin tonë:

javascript'a.x abx azx'.replace(/a.x/g, '!'); // kthen '! ! !', kurse pritej '! abx azx'

Lista e simboleve speciale dhe të zakonshme

Nëse ekranizoni një simbol të zakonshëm - asgjë e tmerrshme nuk do të ndodhë - ai prapë do të përfaqësojë vetveten. Përjashtim - shifrat, ato nuk mund të ekranizohen.

Shpesh lind dyshimi nëse një simbol i caktuar është special. Disa njerëz arrijnë në atë pikë që të ekranizojnë të gjitha simbolet të dyshimtë me radhë. Megjithatë, kjo është praktikë e keqe (e bën regex të ndotur me backslashe).

Janë simbole speciale: $ ^ . * + ? \ / {} [] () |

Nuk janë simbole speciale: @ : , ' " ; - _ = < > % # ~ `& !

Detyra praktike

Задание 1

Është dhënë vargu:

javascriptlet str = 'a.a aba aea';

Shkruani një regex që do të gjejë vargun 'a.a', pa kapur pjesën tjetër.

Задание 2

Është dhënë vargu:

javascriptlet str = '2+3 223 2223';

Shkruani një regex që do të gjejë vargun '2+3', pa kapur pjesën tjetër.

Задание 3

Është dhënë vargu:

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

Shkruani një regex që do të gjejë vargjet '2+3', '2++3', '2+++3', pa kapur pjesën tjetër (+ mund të jetë çdo numër).

Задание 4

Është dhënë vargu:

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

Shkruani një regex që do të gjejë vargjet '23', '2+3', '2++3', '2+++3', pa kapur pjesën tjetër.

Задание 5

Është dhënë vargu:

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

Shkruani një regex që do të gjejë vargjet '*q+', '*qq+', '*qqq+', pa kapur pjesën tjetër.

Задание 6

Është dhënë vargu:

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

Shkruani një regex që do të gjejë vargjet në kllapa katrore dhe do t'i zëvendësojë ato me '!'.