Екранирање специјалних знакова у регуларним изразима 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]';
Напишите регуларни израз који ће пронаћи ниске
у угластим заградама и заменити их са '!'.