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':
let str = 'a+x ax aax aaax';
let res = str.replace(/a+x/g, '!');
Tulemusena kirjutatakse muutujasse järgmine:
'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'.
let str = 'a+x ax aax aaax';
let res = str.replace(/a\+x/g, '!');
Tulemusena kirjutatakse muutujasse järgmine:
'! ax aax aaax'
Näide
Selles näites näeb templ välja selline: täht
'a', siis punkt '.', siis
täht 'x':
let str = 'a.x abx azx';
let res = str.replace(/a\.x/g, '!');
Tulemusena kirjutatakse muutujasse järgmine:
'! 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:
let str = 'a.x abx azx';
let res = str.replace(/a.x/g, '!');
Tulemusena kirjutatakse muutujasse järgmine:
'! ! !'
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:
'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:
'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:
let str = 'a.a aba aea';
Kirjutage regulaaravaldis, mis leiab stringi
'a.a', ei haara teisi.
Antud string:
let str = '2+3 223 2223';
Kirjutage regulaaravaldis, mis leiab stringi
'2+3', ei haara teisi.
Antud string:
let 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:
let 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:
let str = '*+ *q+ *qq+ *qqq+ *qqq qqq+';
Kirjutage regulaaravaldis, mis leiab stringid
'*q+', '*qq+', '*qqq+',
ei haara teisi.
Antud string:
let str = '[abc] {abc} abc (abc) [abc]';
Kirjutage regulaaravaldis, mis leiab stringid
ruutsulgudes ja asendab need '!'-ga.