JavaScript'теги регулярдуу ifadeлердин ачкөздүгүн чектөө
Регулярдуу ifadeлер демейки абалда ачкөз болот. Бул алар максималдуу мүмкүн болгон символдорду кармап аларын билдирет. Келгиле, мисал менен карап көрөлү. Бизде мындай сап бар болсун:
let str = 'aeeex zzz x kkk';
Бул саптан биз төмөнкүдөй үлгү боюнча 'aeeex' подсабын тапкыбыз келет: 'a' арбын, андан кийин каалаган бир же бир нече символ, андан кийин .
'x' арбын
let res = str.replace(/a.+x/g, '!');
Биз күткөнүбүз, натыйжада өзгөрмөгө '! zzz x kkk' сабы жазылары. Бирок, андай эмес - өзгөрмөгө '! kkk' сабы түшөт.
Маселени баары биздин регулярдык 'a' арбынан 'x' арбына чейинки бардык символдорду издеши.
Бирок биздин сапта эки 'x' арбы бар! Ачкөздүктөн улам регулярдык акыркы 'x' ге чейин издеп, биз күткөндү эмес нерсени кармап алат.
Албетте, көп учурда ушундай жүрүм-турум бизге керек болот. Бирок, ушул учурда биз ачкөздүктү жок кылып, регулярга биринчи 'x' ге чейин издешин айткыбыз келет.
Ачкөздүктү чектөө үчүн, кайталоо операторунун артына суроо белгисин коюу керек:
let res = str.replace(/a.+?x/g, '!');
Ачкөздүктү бардык кайталоо операторлоруна чектөөгө болот: *, ?, жана {}
- мындай: *?, ?? жана {}?.
Саб берилген:
let str = 'aba accca azzza wwwwa';
Ар экөөнүн четинде 'a' арптары турган бардык саптарды таап, ар биринин ордуна '!' менен алмаштыра турган регулярдык жаз.
'a' арптарынын ортосунда каалаган символ ('a' дан башка) болушу мүмкүн.