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

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

javascriptlet 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ą:

javascriptlet res = str.replace(/a.+?x/g, '!');

Godumą galima apriboti visiems pakartojimo operatoriams: ir *, ir ?, ir {} - štai taip: *?, ?? ir {}?.

Задание 1

Duota eilutė:

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