Godumo apribojimas reguliariosiose išraiškose JavaScript
Regulariosios išraiškos pagal nutylėjimą yra godžios. Tai reiškia, kad jos perima kuo daugiau simbolių, kiek įmanoma. Pažiūrėkime pavyzdžiu. Tarkime, kad turime tokią eilutę:
let str = 'aeeex zzz x kkk';
Tarkime, kad šioje eilutėje norime rasti poeilutę
'aeeex' pagal šį šabloną: raidė
'a', tada bet koks simbolis vieną ar daugiau
kartų, tada raidė 'x'.
let res = str.replace(/a.+x/g, '!');
Tikimės, kad į kintamąjį rezultate
įrašysime eilutę '! zzz x kkk'. Tačiau,
taip neįvyksta - į kintamąjį pateikia eilutė
'! kkk'.
Visa tai dėl to, kad mūsų reguliarioji išraiška ieško visų
simbolių nuo raidės 'a' iki raidės 'x'.
Bet mūsų eilutėje yra dvi raidės 'x'! Dėl
godumo pasirodo, kad reguliarioji išraiška ieško iki
pat paskutinio x, taip perimdama
ne tai, ko tikėjomės.
Žinoma, dažnai toks elgesys mums ir reikalingas. Bet konkrečiai šiuo atveju mes norėtume atšaukti godumą ir nurodyti reguliariajai išraiškai, kad ji ieškotų iki pirmojo x.
Norint apriboti godumą, reikia po pakartojimo operatoriaus įdėti klaustuką:
let res = str.replace(/a.+?x/g, '!');
Godumą galima apriboti visiems pakartojimo
operatoriams: ir *, ir ?, ir {}
- štai taip: *?, ?? ir {}?.
Duota eilutė:
let str = 'aba accca azzza wwwwa';
Parašykite reguliariąją išraišką, kuri ras visas eilutes,
kurių kraštuose yra raidės 'a',
ir kiekvieną iš jų pakeis '!'. Tarp
raidžių 'a' gali būti bet koks simbolis (išskyrus
'a').