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
Antud string:
javascriptlet str = 'a.a aba aea';
Kirjutage regulaaravaldis, mis leiab stringi
'a.a', ei haara teisi.
Antud string:
javascriptlet str = '2+3 223 2223';
Kirjutage regulaaravaldis, mis leiab stringi
'2+3', ei haara teisi.
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).
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.
Antud string:
javascriptlet str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Kirjutage regulaaravaldis, mis leiab stringid
'*q+', '*qq+', '*qqq+',
ei haara teisi.
Antud string:
javascriptlet str = '[abc] {abc} abc (abc) [abc]';
Kirjutage regulaaravaldis, mis leiab stringid
ruutsulgudes ja asendab need '!'-ga.