Regularās izteiksmes mantkārības ierobežošana JavaScript
Regularās izteiksmes pēc noklusējuma ir mantkārīgas. Tas nozīmē, ka tās notver pēc iespējas vairāk rakstzīmes. Analizēsim to ar piemēru. Pieņemsim, ka mums ir šāda virkne:
let str = 'aeeex zzz x kkk';
Pieņemsim, ka šajā virknē vēlamies atrast apakšvirkni
'aeeex' saskaņā ar šādu veidni: burts
'a', pēc tam jebkura rakstzīme vienu vai vairāk
reizes, pēc tam burts 'x'.
let res = str.replace(/a.+x/g, '!');
Mēs sagaidām, ka mainīgā rezultātā
tiks ierakstīta virkne '! zzz x kkk'. Tomēr
tā nenotiek - mainīgā nonāk virkne
'! kkk'.
Lieta ir tajā, ka mūsu regularā izteiksme meklē visas
rakstzīmes no burta 'a' līdz burtam 'x'.
Bet mūsu virknē ir divi burti 'x'! Mantkārības dēļ
izrādās, ka regularā izteiksme meklē līdz
pat pēdējā x, tādējādi notverot
ne to, ko mēs gaidījām.
Protams, bieži vien šāda uzvedība mums ir vajadzīga. Bet tieši šajā gadījumā mēs vēlētos atcelt mantkārību un likt regularajai izteiksmei meklēt līdz pirmajam x.
Lai ierobežotu mantkārību, aiz atkārtojuma operatora jāieliek jautājuma zīme:
let res = str.replace(/a.+?x/g, '!');
Mantkārību var ierobežot visiem atkārtojuma
operatoriem: gan *, gan ?, gan {}
- šādi: *?, ?? un {}?.
Dota virkne:
let str = 'aba accca azzza wwwwa';
Uzrakstiet regularu izteiksmi, kas atradīs visas virknes,
kuru malās ir burti 'a',
un aizvietos katru no tām ar '!'. Starp
burtiem 'a' var būt jebkura rakstzīme (izņemot
'a').