Erimärkide ekraanimine JavaScripti regulaaravaldistes

Oletame, et tahame, et erimärk tähistaks iseennast. Selleks tuleb see ekraanida kurakaldkriipsu abil. Vaatame näidete varal.

Näide

Järgmises näites soovis regulaaravaldise autor, et otsimustempl näeks välja selline: täht 'a', siis pluss '+', siis täht 'x'. Siiski, koodi autor ei ekraaninud sümbolit '+' ja seetõttu on otsimustempl tegelikult selline: täht 'a' üks või mitu korda, siis täht 'x':

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

Tulemusena kirjutatakse muutujasse järgmine:

javascript'a+x ! ! !'

Näide

Nüüd on autor ekraaninud plussi kurakaldkriipsuga. Nüüd näeb otsimustempl välja nagu vaja: täht 'a', siis pluss '+', siis täht 'x'.

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

Tulemusena kirjutatakse muutujasse järgmine:

javascript'! ax aax aaax'

Näide

Selles näites näeb templ välja selline: täht 'a', siis punkt '.', siis täht 'x':

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

Tulemusena kirjutatakse muutujasse järgmine:

javascript'! abx azx'

Näide

Järgmises näites unustas autor ekraanida kaldkriipsu ja regulaaravaldisele vastasid kõik alamsõned, kuna ekraanimata punkt tähistab suvalist sümbolit:

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

Tulemusena kirjutatakse muutujasse järgmine:

javascript'! ! !'

Märkus

Pange tähele, et kui unustada punkti jaoks kurakaldkriips (kui see peaks tähistama iseennast) - siis võib seda isegi ei märgata:

javascript'a.x'.replace(/a.x/g, '!'); // tagastab '!', nagu me soovisimegi

Visuaalselt töötab õigesti (kuna punkt tähistab suvalist sümbolit, sealhulgas ka tavalist punkti '.'). Kuid kui muuta stringi, milles asendused toimuvad - näeme oma viga:

javascript'a.x abx azx'.replace(/a.x/g, '!'); // tagastab '! ! !', kuid oodati '! abx azx'

Erimärkide ja tavamärkide loetelu

Kui ekraanida tavaline märk - ei juhtu midagi halb - see ikkagi tähistab iseennast. Erandiks on numbrid, neid ei saa ekraanida.

Sageli tekib kahtlus, kas antud märk on erimärk. Mõni jõuab selleni, et ekraanib kõik kahtlased sümbolid ühe kaupa. See on siiski halb praktika (tombab regulaaravaldise kurakaldkriipsudest umbe).

Erimärgid on: $ ^ . * + ? \ / {} [] () |

Ei ole erimärgid: @ : , ' " ; - _ = < > % # ~ `& !

Praktilised ülesanded

Задание 1

Antud string:

javascriptlet str = 'a.a aba aea';

Kirjutage regulaaravaldis, mis leiab stringi 'a.a', ei haara teisi.

Задание 2

Antud string:

javascriptlet str = '2+3 223 2223';

Kirjutage regulaaravaldis, mis leiab stringi '2+3', ei haara teisi.

Задание 3

Antud string:

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

Kirjutage regulaaravaldis, mis leiab stringid '2+3', '2++3', '2+++3', ei haara teisi (+ võib olla suvaline kogus).

Задание 4

Antud string:

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

Kirjutage regulaaravaldis, mis leiab stringid '23', '2+3', '2++3', '2+++3', ei haara teisi.

Задание 5

Antud string:

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

Kirjutage regulaaravaldis, mis leiab stringid '*q+', '*qq+', '*qqq+', ei haara teisi.

Задание 6

Antud string:

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

Kirjutage regulaaravaldis, mis leiab stringid ruutsulgudes ja asendab need '!'-ga.