Kuzuia Herufi Maalum Katika Usanifu (Regular Expressions) JavaScript

Tukichukulia kwamba tunataka kufanya herufi maalum iashirie yenyewe. Ili kufanya hivyo inahitaji kuzuiwa kwa kutumia mshale wa nyuma (backslash). Hebu tuangalie kwa mifano.

Mfano

Katika mfano ufuatao mwandishi wa usanifu alitaka, muundo wa utafutaji uonekane kama hivi: herufi 'a', kisha alama ya jumlisha '+', kisha herufi 'x'. Hata hivyo, mwandishi wa msimbo hakuizuia alama '+' na kwa hivyo muundo wa utafutaji kweli unafanana na hivi: herufi 'a' mara moja au zaidi, kisha herufi 'x':

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

Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:

javascript'a+x ! ! !'

Mfano

Sasa mwandishi ameizuia alama ya jumlisha kwa mshale wa nyuma. Sasa muundo wa utafutaji unaonekana kama inavyotakiwa: herufi 'a', kisha alama ya jumlisha '+', kisha herufi 'x'.

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

Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:

javascript'! ax aax aaax'

Mfano

Katika mfano huu muundo unafanana na hivi: herufi 'a', kisha nukta '.', kisha herufi 'x':

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

Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:

javascript'! abx azx'

Mfano

Katika mfano ufuatao mwandishi amesahau kuzuia nukta na usanifu umevuta herufi zote, kwa sababu nukta isiyozuiwa inaashiria herufi yoyote:

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

Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:

javascript'! ! !'

Uzingatio

Zingatia kwamba kama utasahau mshale wa nyuma kwa nukta (wakati inapaswa kuashiria yenyewe) - hii inaweza hata kutokugundulika:

javascript'a.x'.replace(/a.x/g, '!'); // itarudisha '!', kama tulivyotaka

Kwa kuonekana inafanya kazi sawa (kwa sababu nukta inaashiria herufi yoyote, pamoja na nukta ya kawaida '.'). Lakini kama utakibadilisha mfuatano, ambao badiliko linatendeka - tutaona makosa yetu ya wazi:

javascript'a.x abx azx'.replace(/a.x/g, '!'); // itarudisha '! ! !', lakini ilitarajiwa '! abx azx'

Orodha ya alama maalum na za kawaida

Kama utazuia herufi ya kawaida - hakitakuwa na jambo baya litakalotokea - bado itaashiria yenyewe. Isipokuwa - nambari, haziwezi kuzuiwa.

Mara nyingi huwa na shaka, ikiwa herufi fulani ni maalum. Wengine hufika kwenye hatua ya kuzuia herufi zote zenye tuhuma mfululizo. Hata hivyo, hii ni tabia mbaya (inachafua usanifu kwa mishale ya nyuma).

Ni alama maalum: $ ^ . * + ? \ / {} [] () |

Si alama maalum: @ : , ' " ; - _ = < > % # ~ `& !

Kazi za vitendo

Задание 1

Umepewa mfuatano:

javascriptlet str = 'a.a aba aea';

Andika usanifu, ambayo itapata mfuatano 'a.a', bila kuvuta mingine.

Задание 2

Umepewa mfuatano:

javascriptlet str = '2+3 223 2223';

Andika usanifu, ambayo itapata mfuatano '2+3', bila kuvuta mingine.

Задание 3

Umepewa mfuatano:

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

Andika usanifu, ambayo itapata mifuatano '2+3', '2++3', '2+++3', bila kuvuta mingine (+ inaweza kuwa idadi yoyote ya herufi).

Задание 4

Umepewa mfuatano:

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

Andika usanifu, ambayo itapata mifuatano '23', '2+3', '2++3', '2+++3', bila kuvuta mingine.

Задание 5

Umepewa mfuatano:

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

Andika usanifu, ambayo itapata mifuatano '*q+', '*qq+', '*qqq+', bila kuvuta mingine.

Задание 6

Umepewa mfuatano:

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

Andika usanifu, ambayo itapata mifuatano kwenye mabano mraba na ivabadilishe kwa '!'.