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':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:
'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'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:
'! ax aax aaax'
Mfano
Katika mfano huu muundo unafanana na hivi: herufi
'a', kisha nukta '.', kisha
herufi 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:
'! abx azx'
Mfano
Katika mfano ufuatao mwandishi amesahau kuzuia nukta na usanifu umevuta herufi zote, kwa sababu nukta isiyozuiwa inaashiria herufi yoyote:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Matokeo yake, kwenye kibadala kitaandikwa yafuatayo:
'! ! !'
Uzingatio
Zingatia kwamba kama utasahau mshale wa nyuma kwa nukta (wakati inapaswa kuashiria yenyewe) - hii inaweza hata kutokugundulika:
'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:
'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
Umepewa mfuatano:
let str = 'a.a aba aea';
Andika usanifu, ambayo itapata mfuatano
'a.a', bila kuvuta mingine.
Umepewa mfuatano:
let str = '2+3 223 2223';
Andika usanifu, ambayo itapata mfuatano
'2+3', bila kuvuta mingine.
Umepewa mfuatano:
let 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).
Umepewa mfuatano:
let 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.
Umepewa mfuatano:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Andika usanifu, ambayo itapata mifuatano
'*q+', '*qq+', '*qqq+',
bila kuvuta mingine.
Umepewa mfuatano:
let str = '[abc] {abc} abc (abc) [abc]';
Andika usanifu, ambayo itapata mifuatano
kwenye mabano mraba na ivabadilishe kwa '!'.