JavaScript тұрақты өрнектерінде арнайы таңбаларды экранизациялау

Біз арнайы таңбаның өзін білдіруін қалаймыз деп алайық. Ол үшін оны кері слешпен экранизациялау керек. Мысалдармен қарастырайық.

Мысал

Келесі мысалда тұрақты өрнектің авторы іздеу үрдісінің мынадай болғанын қалаған: 'a' әрпі, содан кейін плюс '+', содан кейін 'x' әрпі. Алайда, код авторы '+' таңбасын экранизацияламаған, сондықтан іздеу үрдісі шын мәнінде мынадай: 'a' әрпі бір немесе одан да көп рет, содан кейін 'x' әрпі:

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

Нәтижесінде айнымалыға мыналар жазылады:

javascript'a+x ! ! !'

Мысал

Ал енді автор плюсті кері слешпен экранизациялаған. Енді іздеу үрдісі қалағандай болды: 'a' әрпі, содан кейін плюс '+', содан кейін 'x' әрпі.

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

Нәтижесінде айнымалыға мыналар жазылады:

javascript'! ax aax aaax'

Мысал

Бұл мысалда үрдіс мынадай: 'a' әрпі, содан кейін нүкте '.', содан кейін 'x' әрпі:

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

Нәтижесінде айнымалыға мыналар жазылады:

javascript'! abx azx'

Мысал

Келесі мысалда автор нүктені экранизациялауды ұмытып қойған, сондықтан тұрақты өрнек барлық жол тармақтарына сәйкес келді, себебі экранизацияланбаған нүкте кез келген таңбаны білдіреді:

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

Нәтижесінде айнымалыға мыналар жазылады:

javascript'! ! !'

Ескерту

Егер сіз нүкте үшін кері слешті ұмытып қалсаңыз (ол өзін білдіруі керек болған кезде) - мұны байқамауыңыз мүмкін:

javascript'a.x'.replace(/a.x/g, '!'); // '!' қайтарады, біз қалағанымыздай

Визуалды түрде дұрыс жұмыс істейді (себебі нүкте кез келген таңбаны білдіреді, соның ішінде қарапайым нүктені '.'). Бірақ егер ауыстырулар жүретін жолды өзгертсек - біз өз қатемізді көреміз:

javascript'a.x abx azx'.replace(/a.x/g, '!'); // '! ! !' қайтарады, бірақ '! abx azx' күтілген еді

Арнайы таңбалар мен қарапайым таңбалардың тізімі

Егер қарапайым таңбаны экранизацияласаңыз - ешқандай қатері жоқ - ол бәрібір өзін білдіреді. Ерекшелік - сандар, оларды экранизациялауға болмайды.

Жиі берілген таңбаның арнайы болып табылатынына күмән туады. Кейбіреулер күдікті таңбалардың барлығын қатарынан экранизациялауға дейін барады. Алайда, бұл нашар тәжірибе (тұрақты өрнекті кері слештермен тұңып қалады).

Арнайы таңбалар: $ ^ . * + ? \ / {} [] () |

Арнайы таңбалар емес: @ : , ' " ; - _ = < > % # ~ `& !

Практикалық тапсырмалар

Задание 1

Жол берілген:

javascriptlet str = 'a.a aba aea';

'a.a' жолын табатын, басқаларын қоспайтын тұрақты өрнек жазыңыз.

Задание 2

Жол берілген:

javascriptlet str = '2+3 223 2223';

'2+3' жолын табатын, басқаларын қоспайтын тұрақты өрнек жазыңыз.

Задание 3

Жол берілген:

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

'2+3', '2++3', '2+++3' жолдарын табатын, басқаларын қоспайтын тұрақты өрнек жазыңыз (+ кез келген саны болуы мүмкін).

Задание 4

Жол берілген:

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

'23', '2+3', '2++3', '2+++3' жолдарын табатын, басқаларын қоспайтын тұрақты өрнек жазыңыз.

Задание 5

Жол берілген:

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

'*q+', '*qq+', '*qqq+' жолдарын табатын, басқаларын қоспайтын тұрақты өрнек жазыңыз.

Задание 6

Жол берілген:

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

Шаршы жақшадағы жолдарды тауып, оларды '!'-ге ауыстыратын тұрақты өрнек жазыңыз.