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:

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

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

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

Ochko‘zlikni barcha takrorlash operatorlariga cheklash mumkin: *, ?, va {} - mana shunday: *?, ?? va {}?.

Задание 1

Satr berilgan:

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