⊗jsSpREESCh 99 of 294 menu

Экранiроўка спецсімвалаў у рэгулярках 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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць