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':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Si rezultat, në variabël do të shkruhet si më poshtë:
'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'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Si rezultat, në variabël do të shkruhet si më poshtë:
'! ax aax aaax'
Shembull
Në këtë shembull, modeli duket kështu: shkronja
'a', pastaj pikë '.', pastaj
shkronja 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Si rezultat, në variabël do të shkruhet si më poshtë:
'! 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:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Si rezultat, në variabël do të shkruhet si më poshtë:
'! ! !'
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:
'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ë:
'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
Është dhënë vargu:
let str = 'a.a aba aea';
Shkruani një regex që do të gjejë vargun
'a.a', pa kapur pjesën tjetër.
Është dhënë vargu:
let str = '2+3 223 2223';
Shkruani një regex që do të gjejë vargun
'2+3', pa kapur pjesën tjetër.
Është dhënë vargu:
let 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).
Është dhënë vargu:
let 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.
Është dhënë vargu:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Shkruani një regex që do të gjejë vargjet
'*q+', '*qq+', '*qqq+',
pa kapur pjesën tjetër.
Është dhënë vargu:
let 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 '!'.