JavaScriptda muntazam ifodalarning ochko‘zligini cheklash
Muntazam ifodalar sukut bo‘yicha ochko‘z. Bu ular maksimal mumkin bo‘lgan belgilar sonini qamrab olishlarini anglatadi. Keling, buni misol bilan ko‘rib chiqaylik. Faraz qilaylik, bizda quyidagi satr bor:
let str = 'aeeex zzz x kkk';
Faraz qilaylik, biz ushbu satrdan 'aeeex' pastki satrini
quyidagi andazada topishni xohlaymiz: 'a' harfi,
keyin istalgan belgi bir yoki bir necha marta,
keyin 'x' harfi.
let res = str.replace(/a.+x/g, '!');
Biz natijada o‘zgaruvchiga '! zzz x kkk' satri yozilishini kutamiz. Biroq,
bunday bo‘lmaydi - o‘zgaruvchiga '! kkk' satri kiradi.
Muammo shundaki, bizning muntazam ifoda
'a' harfidan 'x' harfigacha bo‘lgan barcha
belgilarni qidiradi.
Ammo bizning satrimizda ikkita 'x' harfi bor!
Ochko‘zlik tufayli muntazam ifoda oxirgi
'x'gacha qidiradi, shu bilan biz kutgandan
boshqasini qamrab oladi.
Albatta, ko‘p hollarda aynan shunday xatti-harakat kerak.
Ammo aynan ushbu holatda biz ochko‘zlikni bekor qilishni
va muntazam ifodaga birinchi 'x'gacha qidirishni aytishni
xohlaymiz.
Ochko‘zlikni cheklash uchun takrorlash operatoridan keyin so‘roq belgisini qo‘yish kerak:
let res = str.replace(/a.+?x/g, '!');
Ochko‘zlikni barcha takrorlash operatorlariga
cheklash mumkin: *, ?, va {}
- mana shunday: *?, ?? va {}?.
Satr berilgan:
let str = 'aba accca azzza wwwwa';
Chettalarida 'a' harflari turgan barcha satrlarni topadigan
va ularning har birini '!' bilan almashtiradigan muntazam ifoda yozing.
'a' harflari orasida istalgan belgi ('a'dan tashqari) bo‘lishi mumkin.