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':

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

Rezultātā mainīgajā tiks ierakstīts sekojošais:

javascript'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'.

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

Rezultātā mainīgajā tiks ierakstīts sekojošais:

javascript'! ax aax aaax'

Piemērs

Šajā piemērā šablons izskatās šādi: burts 'a', tad punkts '.', tad burts 'x':

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

Rezultātā mainīgajā tiks ierakstīts sekojošais:

javascript'! 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:

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

Rezultātā mainīgajā tiks ierakstīts sekojošais:

javascript'! ! !'

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:

javascript'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:

javascript'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

Задание 1

Dota virkne:

javascriptlet str = 'a.a aba aea';

Uzrakstiet regulāro izteiksmi, kas atradīs virkni 'a.a', neiekļaujot pārējās.

Задание 2

Dota virkne:

javascriptlet str = '2+3 223 2223';

Uzrakstiet regulāro izteiksmi, kas atradīs virkni '2+3', neiekļaujot pārējās.

Задание 3

Dota virkne:

javascriptlet 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).

Задание 4

Dota virkne:

javascriptlet 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.

Задание 5

Dota virkne:

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

Uzrakstiet regulāro izteiksmi, kas atradīs virknes '*q+', '*qq+', '*qqq+', neiekļaujot pārējās.

Задание 6

Dota virkne:

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

Uzrakstiet regulāro izteiksmi, kas atradīs virknes kvadrātiekavās un aizvietos tās ar '!'.