JavaScript muntazam ifodalarda pozitiv va negativ tekshiruv
Ba'zan quyidagi turdagi masalani hal qilish kerak bo'ladi: satrni
'aaa' toping va uni '!' bilan almashtiring,
lekin faqat 'aaa' dan keyin
'x' turgan paytda, 'x' ning o'zini
esa almashtirmang. Agar biz bu masalani
"to'g'ridan-to'g'ri" hal qilishga harakat qilsak,
hech narsa chiqmaydi:
'aaax baaa'.replace(/aaax/g, '!'); // '! baaa' qaytaradi, lekin biz '!x baaa' ni xohlaymiz
Oldinga qarash
Masalani hal qilish uchun 'x' ni almashtirish
kerak emasligini aytish usuli kerak. Buning uchun
(?= ) maxsus qavslari ishlatiladi, ular
shunchaki tekshiradi, lekin o'zlashtirmaydi.
Bu qavslar oldinga pozitiv qarash deb ataladi.
Pozitiv - chunki 'x' (bizning holatda)
bo'lishi kerak - faqat shunda almashtirish amalga oshadi.
Keling, ushbu qavslarni bizning masalamizni hal qilish uchun qo'llaymiz:
'aaax aaab'.replace(/aaa(?=x)/g, '!'); // '!x aaab' qaytaradi
Shuningdek, oldinga negativ qarash
- (?! ) - mavjud. U, aksincha, biror narsa
bo'lmasligi kerakligini bildiradi. Quyidagi misolda,
almashtirish faqat 'aaa' dan keyin
'x' bo'lmaganda amalga oshadi:
'aaax aaab'.replace(/aaa(?!x)/g, '!'); // 'aaax !b' qaytaradi
Orqaga qarash
Xuddi shunday, orqaga pozitiv qarash
- (?<= ) mavjud. Quyidagi
misolda almashtirish faqat 'aaa' dan oldin
'x' turganida amalga oshadi:
'xaaa'.replace(/(?<=x)aaa/g, '!'); // 'x!' qaytaradi
Shuningdek, orqaga negativ qarash
- (?<! ) ham mavjud. Quyidagi misolda almashtirish
faqat 'aaa' dan oldin
'x' bo'lmaganda amalga oshadi:
'baaa'.replace(/(?<!x)aaa/g, '!'); // 'b!' qaytaradi
Amaliy masalalar
Funksiya nomlarini o'z ichiga olgan satr berilgan:
let str = 'func1() func2() func3()';
Satzdan funksiya nomlari massivini oling.
Teg bilan satr berilgan:
let str = '<a href="" class="eee" id="zzz">';
Ushbu tegning atribut nomlari massivini oling.
O'zgaruvchilar bilan satr berilgan:
let str = '$aaa $bbb $ccc xxxx';
Oldida dollar belgisi turgan pastki satrlarni oling.