⊗jsSpREESCh 99 of 294 menu

Escapování speciálních znaků v regulárních výrazech JavaScriptu

Předpokládejme, že chceme, aby speciální znak představoval sám sebe. K tomu je třeba jej escapovat pomocí zpětného lomítka. Podívejme se na příkladech.

Příklad

V následujícím příkladu autor regulárního výrazu chtěl, aby vyhledávací vzor vypadal takto: písmeno 'a', poté plus '+', poté písmeno 'x'. Avšak autor kódu neescapoval symbol '+', a proto ve skutečnosti vyhledávací vzor vypadá takto: písmeno 'a' jedno nebo vícekrát, poté písmeno 'x':

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

Výsledek zapsaný do proměnné bude následující:

'a+x ! ! !'

Příklad

Nyní autor escapoval plus zpětným lomítkem. Nyní vyhledávací vzor vypadá tak, jak má: písmeno 'a', poté plus '+', poté písmeno 'x'.

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

Výsledek zapsaný do proměnné bude následující:

'! ax aax aaax'

Příklad

V tomto příkladu vzor vypadá takto: písmeno 'a', poté tečka '.', poté písmeno 'x':

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

Výsledek zapsaný do proměnné bude následující:

'! abx azx'

Příklad

V následujícím příkladu autor zapomněl escapovat lomítko a regulární výraz našel všechny podřetězce, protože neescapovaná tečka značí libovolný znak:

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

Výsledek zapsaný do proměnné bude následující:

'! ! !'

Poznámka

Všimněte si, že pokud zapomenete zpětné lomítko pro tečku (když má znamenat sama sebe) - nemusíte si toho ani všimnout:

'a.x'.replace(/a.x/g, '!'); // vrátí '!', jak jsme chtěli

Vizuálně to funguje správně (protože tečka značí libovolný znak, včetně obyčejné tečky '.'). Ale pokud změníme řetězec, ve kterém se provádějí nahrazování - uvidíme naši chybu:

'a.x abx azx'.replace(/a.x/g, '!'); // vrátí '! ! !', ale očekávalo se '! abx azx'

Seznam speciálních a obyčejných znaků

Pokud escapujete obyčejný znak - nic se nestane - bude stále znamenat sám sebe. Výjimkou jsou číslice, ty nelze escapovat.

Často vzniká pochybnost, zda je daný znak speciální. Někteří docházejí až k tomu, že escapují všechny podezřelé znaky postupně. To je však špatná praxe (zaneřádí regulární výraz zpětnými lomítky).

Speciálními znaky jsou: $ ^ . * + ? \ / {} [] () |

Nejsou speciálními znaky: @ : , ' " ; - _ = < > % # ~ `& !

Praktické úlohy

Je dán řetězec:

let str = 'a.a aba aea';

Napište regulární výraz, který najde řetězec 'a.a', a nezachytí ostatní.

Je dán řetězec:

let str = '2+3 223 2223';

Napište regulární výraz, který najde řetězec '2+3', a nezachytí ostatní.

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce '2+3', '2++3', '2+++3', a nezachytí ostatní (+ může být libovolný počet).

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce '23', '2+3', '2++3', '2+++3', a nezachytí ostatní.

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce '*q+', '*qq+', '*qqq+', a nezachytí ostatní.

Je dán řetězec:

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

Napište regulární výraz, který najde řetězce v hranatých závorkách a nahradí je '!'.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout