Speciális karakterek escape-elése JavaScript reguláris kifejezésekben
Tegyük fel, hogy azt szeretnénk, hogy egy speciális karakter önmagát jelölje. Ehhez escape-elni kell egy visszaperjelellel. Nézzük meg példákon.
Példa
A következő példában a reguláris kifejezés szerzője azt szerette volna,
hogy a keresési minta így nézzen ki: 'a'
'a' betű, majd plusz '+', majd
'x' betű. A kód szerzője azonban
nem escape-elte a '+' szimbólumot, ezért
a keresési minta valójában így néz ki:
'a''a' betű egyszer vagy többször, majd
'x' betű:
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'a+x ! ! !'
Példa
Ebben a példában a szerző escape-elte a pluszjelet
visszaperjelellel. Most a keresési minta olyan,
ahogy kell: 'a''a' betű, majd plusz
'+', majd 'x' betű.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! ax aax aaax'
Példa
Ebben a példában a minta így néz ki: 'a''a' betű,
majd pont '.', majd
'x' betű:
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! abx azx'
Példa
A következő példában a szerző elfelejtette escape-elni a pontot, és a reguláris kifejezés minden résztringre illeszkedett, mivel egy nem escape-elt pont bármely karaktert jelöl:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Ennek eredményeképpen a változóba a következő íródik:
'! ! !'
Megjegyzés
Figyeljük meg, hogy ha elfelejtjük a visszaperjelet a pont elé (amikor önmagát kellene jelölje) - ezt talán észre sem vesszük:
'a.x'.replace(/a.x/g, '!'); // visszaadja '!'-t, ahogy szerettük volna
Vizuálisan helyesen működik (mivel a pont
bármely karaktert jelöl, beleértve a közönséges
pontot is '.'). De ha megváltoztatjuk a karakterláncot,
amelyen a csere történik - látni fogjuk a
hibánkat:
'a.x abx azx'.replace(/a.x/g, '!'); // visszaadja '! ! !'-t, de '! abx azx' várt
Speciális és közönséges szimbólumok listája
Ha egy közönséges karaktert escape-elünk - semmi rossz nem történik - továbbra is önmagát fogja jelölni. Kivételt képeznek a számok, azokat nem szabad escape-elni.
Gyakran merül fel kétség, hogy egy adott szimbólum speciális-e. Vannak, akik addig mennek, hogy minden gyanús szimbólumot escape-elnek egymás után. Ez azonban rossz gyakorlat (összekuszáltá teszi a reguláris kifejezést visszaperjelekkel).
Speciális karakterek: $ ^ . * + ? \
/ {} [] () |
Nem speciális karakterek: @ : , ' " ;
- _ = < > % # ~ `& !
Gyakorlati feladatok
Adott egy karakterlánc:
let str = 'a.a aba aea';
Írj reguláris kifejezést, amely megtalálja a
'a.a' karakterláncot, anélkül, hogy a többit is kiválasztaná.
Adott egy karakterlánc:
let str = '2+3 223 2223';
Írj reguláris kifejezést, amely megtalálja a
'2+3' karakterláncot, anélkül, hogy a többit is kiválasztaná.
Adott egy karakterlánc:
let str = '23 2+3 2++3 2+++3 345 567';
Írj reguláris kifejezést, amely megtalálja a
'2+3', '2++3', '2+++3'
karakterláncokat, anélkül, hogy a többit is kiválasztaná
(a + bármennyi lehet).
Adott egy karakterlánc:
let str = '23 2+3 2++3 2+++3 445 677';
Írj reguláris kifejezést, amely megtalálja a
'23', '2+3', '2++3',
'2+++3' karakterláncokat, anélkül, hogy a többit is kiválasztaná.
Adott egy karakterlánc:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Írj reguláris kifejezést, amely megtalálja a
'*q+', '*qq+', '*qqq+'
karakterláncokat, anélkül, hogy a többit is kiválasztaná.
Adott egy karakterlánc:
let str = '[abc] {abc} abc (abc) [abc]';
Írj reguláris kifejezést, amely megtalálja a szögletes zárójelben
lévő karakterláncokat és kicseréli őket '!'-ra.