⊗jsSpREESCh 99 of 294 menu

Екраниране на специални символи в регулярни изрази в JavaScript

Да предположим, че искаме да направим така, че специален символ да означава себе си. За целта той трябва да бъде екраниран с помощта на обратна наклонена черта. Нека да разгледаме примери.

Пример

В следващия пример авторът на регулярния израз искаше шаблонът за търсене да изглежда така: буква 'a', следван от плюс '+', следван от буква 'x'. Обаче, авторът на кода не е екранирал символа '+' и затова шаблонът за търсене всъщност изглежда така: буква 'a' един или повече пъти, след това буква 'x':

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

В резултат в променливата ще бъде записано следното:

'a+x ! ! !'

Пример

А сега авторът е екранирал плюса с обратна наклонена черта. Сега шаблонът за търсене изглежда така, както трябва: буква 'a', следван от плюс '+', следван от буква 'x'.

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

В резултат в променливата ще бъде записано следното:

'! ax aax aaax'

Пример

В този пример шаблонът изглежда така: буква 'a', следван от точка '.', следван от буква 'x':

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

В резултат в променливата ще бъде записано следното:

'! abx azx'

Пример

В следващия пример авторът забрави да екранира точката и под регулярния израз попаднаха всички поднизове, тъй като неекранираната точка означава всякакъв символ:

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

В резултат в променливата ще бъде записано следното:

'! ! !'

Забележка

Обърнете внимание, че ако забравите обратната наклонена черта за точката (когато тя трябва да означава сама себе си) - това може дори да не се забележи:

'a.x'.replace(/a.x/g, '!'); // ще върне '!', както сме искали

Визуално работи правилно (тъй като точката означава всякакъв символ, включително и обикновена точка '.'). Но ако променим низа, в който се извършват замените - ще видим нашата грешка:

'a.x abx azx'.replace(/a.x/g, '!'); // ще върне '! ! !', а се очакваше '! abx azx'

Списък на специални и обикновени символи

Ако екранирате обикновен символ - нищо лошо няма да се случи - той все пак ще означава себе си. Изключение - цифрите, те не могат да бъдат екранирани.

Често възниква съмнение дали даден символ е специален. Някои хора стигат дотам, че екранират всички подозрителни символи един след друг. Това обаче е лоша практика (запълва регулярния израз с обратни наклонени черти).

Специални символи са: $ ^ . * + ? \ / {} [] () |

Не са специални символи: @ : , ' " ; - _ = < > % # ~ `& !

Практически задачи

Даден е низ:

let str = 'a.a aba aea';

Напишете регулярен израз, който ще намери низа 'a.a', без да улавя останалите.

Даден е низ:

let str = '2+3 223 2223';

Напишете регулярен израз, който ще намери низа '2+3', без да улавя останалите.

Даден е низ:

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

Напишете регулярен израз, който ще намери низовете '2+3', '2++3', '2+++3', без да улавя останалите (+ може да бъде произволен брой).

Даден е низ:

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

Напишете регулярен израз, който ще намери низовете '23', '2+3', '2++3', '2+++3', без да улавя останалите.

Даден е низ:

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

Напишете регулярен израз, който ще намери низовете '*q+', '*qq+', '*qqq+', без да улавя останалите.

Даден е низ:

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

Напишете регулярен израз, който ще намери низовете в квадратни скоби и ще ги замени с '!'.

Български
AfrikaansAzərbaycanবাংলাБеларускаяČeštinaDanskDeutschΕλληνικά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
Ние използваме бисквитки за работата на сайта, анализ и персонализация. Обработката на данни се извършва в съответствие с Политика за поверителност.
приемам всички настройки отхвърляне