⊗jsSpREEP 129 of 294 menu

JavaScriptda regexning o'zida karmalar

Karmalarning mazmuni nafaqat almashtirish matnida, balki regexning o'zida ham mavjud: biz biror narsani karmaga joylashtirishimiz mumkin, so'ngra to'g'ridan-to'g'ri regexda aytishimiz mumkin, bu yerda shu karmaning mazmuni bo'lishi kerak.

Karmalarning mazmuni ularning raqamlari bo'yicha mavjud, oldiga teskari chiziq qo'yilgan. Masalan, birinchi karmanı şu şekilde elde edebilirsiniz: \1, ikkinchi karmanı şu şekilde - \2, uchinchi - \3 va hokazo.

Men ishonamanki, yuqorida yozilganlarning hammasi siz uchun hali juda noaniq. Bu ajablanarli emas, chunki karmalar - regexlarning eng tushunarli joyi emas. Keling, misollar orqali tushunishga harakat qilaylik.

Misol

Faraz qilaylik, bizda shunday matn bor:

let str = 'aa bb cd ef';

Keling, unda ketma-ket kelgan har qanday bir xil ikkita harf turgan barcha joylarni topaylik. Masalani yechish uchun biz har qanday harfni qidiramiz, uni karmaga joylaymiz, so'ngra keyingi belgi shu karmaning mazmuni ekanligini teksiramiz:

let res = str.replace(/([a-z])\1/g, '!');

Natijada o'zgaruvchiga quyidagi yoziladi:

'! ! cd ef'

Misol

Faraz qilaylik, bizda shunday matn bor:

let str = 'asxca buzxb csgd';

Keling, unda birinchi va oxirgi harflari bir xil bo'lgan barcha so'zlarni topaylik. Masalani yechish uchun biz quyidagi andozani yozamiz: harf, keyin yana bir yoki bir nechta harflar, va keyin birinchi harf bilan bir xil harf:

let res = str.replace(/([a-z])[a-z]+\1/g, '!');

Natijada o'zgaruvchiga quyidagi yoziladi:

'! ! csgd'

Amaliy masalalar

Matn berilgan:

let str = 'aaa bbb ccc xyz';

Ketma-ket uchta bir xil harf bo'lgan barcha pastki qatorlarni toping.

Matn berilgan:

let str = 'a aa aaa aaaa aaaaa';

Ketma-ket ikkita yoki undan ko'p bir xil harf bo'lgan barcha pastki qatorlarni toping.

Matn berilgan:

let str = 'aaa aaa bbb bbb ccc ddd';

Ketma-ket ikkita bir xil so'z bo'lgan barcha pastki qatorlarni toping.

huuzcsweshy