Belgilar sinflari
Belgi sinfi (character class) β muntazam ifodada belgilarning ma'lum bir turini bildiruvchi maxsus yozuv. Masalan, "istalgan raqam" yoki "istalgan bo'shliq belgisi". Belgi sinflari muntazam ifodalarning eng ko'p ishlatiladigan qismlaridan biridir. Ushbu darsda barcha asosiy belgi sinflarini, nuqta belgisini va ularni amaliy misollarda qo'llashni o'rganamiz.
Belgi sinfi nima?
Ba'zan biz aniq bir belgini emas, balki butun bir toifadagi belgini qidiramiz. Masalan, telefon raqamidagi barcha raqamlarni topmoqchimiz, ammo qaysi raqamlar ekanini oldindan bilmaymiz. Aynan shunday holatlarda belgi sinflari yordamga keladi.
Eng muhim belgi sinfi β raqam (digit). U \d deb yoziladi va istalgan bitta raqamga (0 dan 9 gacha) mos keladi:
Asosiy belgi sinflari
JavaScript'da uchta asosiy belgi sinfi va ularning har biri uchun teskari (inkor) varianti mavjud:
\dβ raqam (digit): 0 dan 9 gacha bo'lgan belgi;\Dβ raqam bo'lmagan:\ddan tashqari istalgan belgi;\sβ bo'shliq belgisi (space): probel, tabulyatsiya\t, qatorga o'tish\nva shu kabilar;\Sβ bo'shliq bo'lmagan:\sdan tashqari istalgan belgi;\wβ so'z belgisi (word): lotin harfi, raqam yoki pastki chiziq_(ya'ni[a-zA-Z0-9_]);\Wβ so'z belgisi bo'lmagan:\wdan tashqari istalgan belgi.
\d raqam bo'lsa, \D β raqam bo'lmagan hamma narsa. Bu qoida barcha juftliklar uchun amal qiladi.Nuqta (.) β istalgan belgi
Nuqta . β bu maxsus belgi sinfi bo'lib, qatorga o'tish belgisidan tashqari istalgan bitta belgiga mos keladi:
\n ga mos kelmaydi. Shuning uchun ko'p qatorli matnda nuqta bir qator ichida qoladi.s flagi β nuqta har qanday belgiga
Agar nuqta qatorga o'tish belgisini ham qamrab olishini istasangiz, s (dotall) flagini qo'shing. U bilan nuqta haqiqatan ham istalgan belgiga, jumladan \n ga ham mos keladi:
s flagi qo'llab-quvvatlanmasa, uning muqobili sifatida [\s\S] yozuvini ishlatish mumkin β u "bo'shliq belgisi YOKI bo'shliq bo'lmagan belgi" degani bo'lib, amalda mutlaqo istalgan belgiga mos keladi.Unicode haqida qisqacha
Belgi sinflari birinchi navbatda ASCII (lotin) belgilariga mo'ljallangan. Masalan, \w faqat lotin harflari, raqamlar va _ ga mos keladi β o'zbek, kirill yoki boshqa alifbolarga mos kelmaydi:
u flagi va unicode xossalari (masalan \p{L} β istalgan alifbodagi harf) ishlatiladi. Bu ilg'or mavzu bo'lib, alohida darsda batafsil ko'rib chiqiladi. Hozircha shuni yodda tuting: \w β bu faqat lotin so'z belgilari.Amaliy misol: telefon raqamini ajratish
Endi belgi sinflarini amaliyotda qo'llaymiz. Foydalanuvchi telefon raqamini turli formatlarda kiritishi mumkin β probellar, chiziqchalar, qavslar bilan. Bizga esa faqat raqamlar kerak. \d va g flagi bu vazifani oson hal qiladi:
Aksincha, biz raqam bo'lmagan barcha belgilarni o'chirib tashlashimiz ham mumkin β buning uchun \D (raqam bo'lmagan) sinfini replace bilan ishlatamiz:
Yana bir amaliy vazifa β matndan barcha "so'z"larni ajratib olish. Buning uchun \w+ naqshi ishlatiladi (bu yerda + β "bir yoki undan ko'p" belgisi, uni keyingi darslarda o'rganamiz):
Bo'shliq belgisiga e'tibor
Ko'pchilik \s (bo'shliq) belgisini e'tiborsiz qoldiradi, ammo u juda muhim. Bo'shliq nafaqat probel, balki tabulyatsiya va qatorga o'tish belgilarini ham o'z ichiga oladi β matnni to'g'ri tozalashda buni hisobga olish kerak:
Xulosa
- belgi sinflari belgilarning ma'lum turiga mos keladi:
\d(raqam),\s(bo'shliq),\w(so'z belgisi); - katta harfli variantlar teskari ma'noni bildiradi:
\D,\S,\W; - nuqta
.qatorga o'tishdan tashqari istalgan belgiga mos keladi;sflagi bilan esa\nga ham mos keladi; [\s\S]βsflagisiz ham istalgan belgiga mos keluvchi muqobil yozuv;\wfaqat lotin harflari, raqamlar va_ga mos keladi; to'liq unicode uchunuflagi va\p{...}kerak;- amaliyotda
\dva\Dyordamida telefon raqamlarini tozalash,\w+bilan so'zlarni ajratish juda qulay.