Muntazam ifodalar (RegExp)

Langarlar: ^ va $, ko'p qatorli rejim

Langarlar (anchors) โ€” muntazam ifodada belgiga emas, balki pozitsiyaga mos keluvchi maxsus belgilardir. Ular hech qanday belgini "iste'mol qilmaydi", faqat satrning boshi, oxiri yoki so'z chegarasi kabi maxsus joylarni belgilaydi. Ushbu darsda ^, $ langarlarini, ko'p qatorli rejimni va so'z chegarasi \bni chuqur o'rganamiz.

Langar nima?

Oddiy belgi sinflari (\d, \w va h.k.) belgiga mos keladi. Langarlar esa pozitsiyaga mos keladi. Ular quyidagilar:

Boshqacha aytganda, ^ "bu yerdan naqsh boshlanishi kerak", $ esa "bu yerda naqsh tugashi kerak" deganidir.

^ โ€” matnning boshi

Karet ^ naqsh matnning aynan boshidan boshlanishini talab qiladi:

karet.js
// natija shu yerda chiqadi

$ โ€” matnning oxiri

Dollar $ naqsh matnning aynan oxiriga to'g'ri kelishini talab qiladi:

dollar.js
// natija shu yerda chiqadi

To'liq moslikni tekshirish: ^...$

^ va $ ni birga ishlatish juda kuchli usul โ€” u naqsh butun matnga to'liq mos kelishini tekshiradi, ya'ni matnning bir qismiga emas, balki hammasiga. Bu forma tekshiruvida (validatsiya) juda muhim:

toliq-moslik.js
// natija shu yerda chiqadi
^\d+$ naqshini so'z bilan o'qib ko'ring: "boshidan (^), bir yoki undan ko'p raqam (\d+), keyin darrov oxir ($)". Ya'ni matn faqat raqamlardan iborat bo'lishi shart. Bu forma tekshiruvining klassik naqshidir.
vaqt-validatsiya.js
// natija shu yerda chiqadi

m flagi โ€” ko'p qatorli rejim

Odatiy holda ^ va $ butun matnning boshi va oxiriga mos keladi, matn ichidagi qator uzilishlarini hisobga olmaydi. m (multiline) flagi bu xatti-harakatni o'zgartiradi: ^ va $ endi har bir qatorning boshi va oxiriga mos keladi.

Avval flagsiz holatni ko'ramiz โ€” faqat birinchi qator boshiga mos keladi:

m-flagsiz.js
// natija shu yerda chiqadi

Endi m flagi bilan โ€” har bir qator boshidagi raqamlar topiladi:

m-flag.js
// natija shu yerda chiqadi

Xuddi shunday, $ ham m flagi bilan har bir qator oxiriga mos keladi:

m-dollar.js
// natija shu yerda chiqadi
m flagini s flagi bilan aralashtirib yubormang. m โ€” ^ va $ langarlarining har qatorga ta'sirini yoqadi. s โ€” nuqta . ning \n ga mos kelishini yoqadi. Ular butunlay boshqa vazifalarni bajaradi.

\b โ€” so'z chegarasi

\b โ€” bu so'z chegarasi (word boundary) langari. U so'z belgisi (\w) va so'z belgisi bo'lmagan belgi (\W) orasidagi pozitsiyaga mos keladi. Boshqacha aytganda, u "so'zning boshi yoki oxiri" degan joyni belgilaydi.

So'z chegarasi uchta holatda mavjud bo'ladi:

b-chegara.js
// natija shu yerda chiqadi

\b ning eng foydali jihati โ€” u so'zning bir qismini emas, balki butun so'zni topishga imkon beradi. Masalan, Java so'zini JavaScript ichidan ajratamiz:

b-butun-soz.js
// natija shu yerda chiqadi
\b raqamlar bilan ham ishlaydi (chunki raqam ham \w ga kiradi), lekin u lotin bo'lmagan alifbolarda (kirill, o'zbek maxsus harflari) kutilganidek ishlamaydi, chunki \w ularni so'z belgisi deb hisoblamaydi.
b-raqam.js
// natija shu yerda chiqadi

Amaliy misol: so'zni almashtirish

\b va langarlarni birga ishlatib, matndagi aynan kerakli so'zni xavfsiz almashtirish mumkin โ€” so'zning boshqa so'zlar ichiga kirib ketgan qismlariga tegmasdan:

b-almashtirish.js
// natija shu yerda chiqadi

Xulosa