Speciālo rakstzīmju ekrānēšana JavaScript regulārajās izteiksmēs
Pieņemsim, ka mēs vēlamies, lai speciālā rakstzīme apzīmētu pati sevi. Lai to izdarītu, tā ir jāekrānē, izmantojot apgriezto slīpsvītru. Apskatīsim to ar piemēriem.
Piemērs
Nākamajā piemērā regulārās izteiksmes autors vēlējās,
lai meklēšanas šablons izskatītos šādi: burts
'a', tad plus zīme '+', tad
burts 'x'. Tomēr, koda autors
neizmantojis ekrānēšanu simbolam '+', un tāpēc
meklēšanas šablons patiesībā izskatās šādi:
burts 'a' viens vai vairāk reižu, tad
burts 'x':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Rezultātā mainīgajā tiks ierakstīts sekojošais:
'a+x ! ! !'
Piemērs
Bet šajā piemērā autors ir ekrānējis plus zīmi ar apgriezto
slīpsvītru. Tagad meklēšanas šablons izskatās tieši tā,
kā vajag: burts 'a', tad plus zīme
'+', tad burts 'x'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Rezultātā mainīgajā tiks ierakstīts sekojošais:
'! ax aax aaax'
Piemērs
Šajā piemērā šablons izskatās šādi: burts
'a', tad punkts '.', tad
burts 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Rezultātā mainīgajā tiks ierakstīts sekojošais:
'! abx azx'
Piemērs
Nākamajā piemērā autors aizmirsa ekrānēt slīpsvītru un ar regulāro izteiksmi tika iekļautas visas apakšvirknes, jo neekrānēts punkts apzīmē jebkuru simbolu:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Rezultātā mainīgajā tiks ierakstīts sekojošais:
'! ! !'
Piezīme
Ievērojiet, ka, ja aizmirsīsiet apgriezto slīpsvītru punktam (kad tam vajadzētu apzīmēt pats sevi) - to var pat nemanīt:
'a.x'.replace(/a.x/g, '!'); // atgriezīs '!', kā mēs to vēlējāmies
Vizuāli darbojas pareizi (tā kā punkts
apzīmē jebkuru simbolu, tostarp arī parastu
punktu '.'). Bet, ja mainīsiet virkni,
kurā notiek aizvietošana - mēs redzēsim savu
kļūdu:
'a.x abx azx'.replace(/a.x/g, '!'); // atgriezīs '! ! !', bet tika gaidīts '! abx azx'
Speciālo un parasto simbolu saraksts
Ja ekrānēsiet parastu simbolu - nekas briesmīgs nenotiks - tas tik un tā būs apzīmē pats sevi. Izņēmums - cipari, tos nevar ekrānēt.
Bieži rodas šaubas, vai dotā rakstzīme ir speciāla. Daži nonāk līdz tam, ka ekrānē visus aizdomīgos simbolus pēc kārtas. Tomēr, tā ir slikta prakse (aizsērē regulāro izteiksmi ar apgrieztajiem slīpsvītram).
Ir speciālās rakstzīmes: $ ^ . * + ? \
/ {} [] () |
Nav speciālās rakstzīmes: @ : , ' " ;
- _ = < > % # ~ `& !
Praktiskie uzdevumi
Dota virkne:
let str = 'a.a aba aea';
Uzrakstiet regulāro izteiksmi, kas atradīs virkni
'a.a', neiekļaujot pārējās.
Dota virkne:
let str = '2+3 223 2223';
Uzrakstiet regulāro izteiksmi, kas atradīs virkni
'2+3', neiekļaujot pārējās.
Dota virkne:
let str = '23 2+3 2++3 2+++3 345 567';
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
'2+3', '2++3', '2+++3',
neiekļaujot pārējās (+ var būt jebkurš
daudzums).
Dota virkne:
let str = '23 2+3 2++3 2+++3 445 677';
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
'23', '2+3', '2++3',
'2+++3', neiekļaujot pārējās.
Dota virkne:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
'*q+', '*qq+', '*qqq+',
neiekļaujot pārējās.
Dota virkne:
let str = '[abc] {abc} abc (abc) [abc]';
Uzrakstiet regulāro izteiksmi, kas atradīs virknes
kvadrātiekavās un aizvietos tās ar '!'.