Muntazam ifodalar (RegExp)

Alternatsiya (yoki) |

Alternatsiya (alternation) โ€” muntazam ifodada "buni yoki uni" degan mantiqni ifodalash usuli. U vertikal chiziq | belgisi bilan yoziladi. Masalan, gul|lola|atirgul โ€” uch guldan istalgan birini tutadi.

Oddiy alternatsiya

| chapdagi va o'ngdagi variantlardan birortasini tanlaydi. Dvigatel chapdan o'ngga tekshiradi va birinchi mos kelganini oladi:

alt-oddiy.js
// natija shu yerda chiqadi

Alternatsiyani belgilar sinfi [...] bilan chalkashtirmaslik kerak. Sinf faqat alohida belgilar orasidan tanlaydi, alternatsiya esa butun ifodalar (bir necha belgili so'zlar) orasidan tanlaydi:

alt-vs-sinf.js
// natija shu yerda chiqadi

Qavs bilan chegaralash

Bu โ€” alternatsiyaning eng muhim nozikligi. | ning "ta'sir doirasi" juda keng โ€” u o'zidan chapdagi va o'ngdagi hamma narsani qamrab oladi. Variantni cheklash uchun uni qavsga olamiz.

Masalan, "Toshkent shahri" yoki "Samarqand shahri" ni tutmoqchimiz. Qavssiz xato bo'ladi:

alt-xato.js
// natija shu yerda chiqadi

To'g'ri yechim โ€” qavs bilan faqat shahar nomini alternatsiya qilamiz, "shahri" so'zi esa umumiy bo'lib qoladi:

alt-qavs.js
// natija shu yerda chiqadi
Eng ko'p yo'l qo'yiladigan xato โ€” | ni qavssiz ishlatish. Yodda tuting: abc|def = abc yoki def, lekin a(bc|de)f = abcf yoki adef.

Tutmaydigan guruh bilan

Agar alternatsiya uchun qavs kerak-u, lekin uning mazmunini saqlash shart bo'lmasa, tutmaydigan guruh (?:...) ni ishlatgan ma'qul:

alt-tutmaydigan.js
// natija shu yerda chiqadi
Tutmaydigan guruh (?:...) keraksiz tutib olishlarni oldini oladi. Bu, ayniqsa, keyin match guruhlarini raqam bo'yicha o'qiganda chalkashlikni kamaytiradi.

Amaliy misol: vaqt (soat:daqiqa)

Vaqtni hh:mm formatida tutamiz. Soat 00 dan 23 gacha, daqiqa 00 dan 59 gacha. Alternatsiya bilan soatning ikki holatini ifodalaymiz:

alt-vaqt.js
// natija shu yerda chiqadi

E'tibor bering, daqiqa qismi oddiy: [0-5]\d โ€” birinchi raqam 0..5, ikkinchisi istalgan, ya'ni 00..59.

Amaliy misol: sanani tekshirish

kun.oy.yil ko'rinishidagi sanani soddaroq tekshiramiz. Bu yerda alternatsiya kun va oy oralig'ini ifodalashda yordam beradi:

alt-sana.js
// natija shu yerda chiqadi

Bu shablon 40.13.2000 ni rad etadi, chunki 40 kun ham, 13 oy ham oraliqqa kirmaydi. E'tibor bering, nuqta \. deb eskeyplangan โ€” aks holda u "istalgan belgi" ma'nosini beradi.

Bunday tekshiruv faqat shaklni tekshiradi, mantiqni emas. Masalan, 31.02.2026 (fevralda 31-kun yo'q) shablon uchun to'g'ri ko'rinadi. Haqiqiy kalendar tekshiruvini Date obyekti bilan alohida qilish kerak.

Alternatsiya tuzoqlari

Bir necha nozik holatni bilib qo'ying:

alt-tartib.js
// natija shu yerda chiqadi
Amaliy qoida: alternatsiya variantlarini yozishda eng uzun (aniqroq) variantni oldinga qo'ying, shunda dvigatel qisqa variantda erta to'xtab qolmaydi.

Xulosa