Regular expression (yana regex, regexp) – qidirish patternini belgilab beruvchi belgilar ketma-ketligi. Odatda regex’lar matn ichida qidiruv algoritmlarida so’zlarni topish (find), topish va almashtirish (find & replace), hamda kiritilgan ma’lumotni tekshirish uchun ishlatiladi.
Regular expressions’ni ifodalash uchun bir necha amallar kiritilgan.
Amal | Tartibi | REga misol | Mos keladi | Mos kelmaydi |
---|---|---|---|---|
concatenation | 3 | AABAAB | AABAAB | boshqa so’zlar |
or | 4 | AA|BAAB | AA BAAB | boshqa so’zlar |
closure | 2 | AB*A | AA ABBBBBBBA | AB ABABA |
parenthesis | 1 | A(A|B)AAB | AAAAB ABAAB | boshqa so’zlar |
parenthesis | 1 | (AB)*A | A ABABABABA | AA ABBA |
Concatenation. Aniq bir so’zni ifodalaydi. Boshqa so’zlar uchrasa mos kelmagan hisoblanadi.
Or. Ishlashi koddagi or operatori bilan bir xil – | belgisi uning ikki tarafidagi shartdan biri mos kelishini tekshiradi. Masalan, AA|BAAB regex uchun AA yoki BAAB so’zlari mos keladi.
Closure. * belgisi bilan ifodalanuvchi amal o’zidan avvalgi belgi yoki birikmaning nol yoki istalgan miqdorda kelishini belgilaydi. Masalan, AB*A regex’da B yo’q yoki birnecha marta qatnashgan so’zlar mos keladi: AA, ABA, ABBBBA
Parenthesis. Qavslar bilan ifodalanib, ichidagi amalning birinchi bo’lib ishlashini ta’minlaydi (huddi matematika va dasturlashdagi kabi). Masalan, (AB)*A regex uchun AB yo’q yoki bir necha marta qatnashgan hamda A bilan tugagan so’zlar mos keladi: AA, ABA, ABABABA. Agar qavslar qo’yilmaganda, ya’ni AB*A holatida AA, ABA, ABBBAA so’zlarini topgan bo’lardi.
Amallarning bajarilish tartibi – parenthesis (1), closure (2), or (3), concatenation (4).
Qo’shimcha amallar
Shuningdek, qulaylik uchun qo’shimcha amallar ham kiritilgan.
Amal | REga misol | Mos keladi | Mos kelmaydi |
---|---|---|---|
wildcard | .U.U.U. | CUMULUS JUGULUM | SUCCUBUS TUMULTUOUS |
character class (Ranges) | [A-Za-z][a-z]* | word Capitalized | camelCase 4illegal |
kamida bitta | A(BC)+DE | ABCDE ABCBCDE | ADE BCDE |
aniq miqdorda | [0-9]{5}-[0-9]{4} | 08540-1321 19072-5541 | 1111111111 166-54-111 |
Qulayligi – ba’zi holatlarda uzun regex’ni qisqartirilgan shaklda yozish imkoniyati borligida. Masalan (A|B|C|D|E)(A|B|C|D|E)* ni qisqacha qilib [A-E]+ ko’rinishida yozsa bo’ladi.
Flags
Amal | REga misol | Mos keladi | Mos kelmaydi |
---|---|---|---|
g (global) | /abc/g | abc | boshqa so’zlar |
i (case insensitive) | /abc/i | abc, Abc, ABc, ABC aBc, aBC, abC | boshqa so’zlar |
m (multiline search) | /abc/m | abc | boshqa so’zlar |
u (unicode support) | – | – | – |
s (single line) | – | – | – |
Character groups
To’rtburchak qavs ichiga olingan belgilar – belgilar guruhi (character groups) deyiladi. Bunda ulardan biri uchrasa yetarli bo’ladi. Masalan [hc]ello – hello va cello so’zlarini topadi. jello, ello so’zlari mos kelmaydi.
Negated character groups
Character groups bilan bir xil va ^ – negativ (inkor qiluvchi) belgi qo’shiladi. Bunda to’rtburchak qavs ichida berilgan belgilar yo’q bo’lsa regex mos keladi. Masalan, [^hc]ello uchun hello va cello so’zlari topilmaydi, jello so’zi mos keladi.
Multiple range item matches
Agar berilgan range ichidan faqat bitta belgini topish kerak bo’lsa ^
va $
belgilaridan foydalaniladi.
/^[A-Z]$/.test('A') // true
/^[A-Z]$/.test('AB') // false
/^[A-Z]$/.test('Ab') // false
/^[A-Z-0-9]$/.test('1') // true
/^[A-Z-0-9]$/.test('A1') // false
Meta-characters
\d: istalgan raqam uchun, [0-9] bilan teng.
\D: istalgan raqam bo’lmagan belgi uchun, [^0-9] bilan teng.
\w: istalgan alphanumeric belgi va «_» (underscore) uchun, [A-Za-z_0-9] bilan teng.
\W: istalgan alphanumeric belgi va «_» (underscore) bo’lmagan holat uchun, [^A-Za-z_0-9] bilan teng.
\s: probel (whitespace) belgilar uchun: space, tab, yangi qator va unicode space.
\S: whitespace bo’lmagan belgilar uchun.
\0: null uchun mos keladi.
\n: yangi qator uchun mos keladi.
\t: tab uchun mos keladi.
\uXXXX: XXXX kodli unicode belgi uchun mos keladi (\u bo’lishi majburiy).
. (nuqta): yangi qatordan tashqari istalgan belgi uchun mos keladi (wildcard).
[^]: istalgan belgi uchun mos keladi (yangi qator belgisi – \n ni ham o’z ichiga oladi).
Quantifiers
|, {}, * va + quantifier’lar haqida yuqorida to’xtaldik. Qolganlari bilan tanishamiz.
?: o’zidan oldingi belgini 0 va undan ko’p marta qaytarilishi mumkinligini belgilaydi. * bilan o’xshash.
var regex = /hii?d/; console.log(regex.test('hid')); // true console.log(regex.test('hiid')); // true console.log(regex.test('hiiid')); // false
^: matnning boshini mos kelishini aniqlaydi.
var regex = /^h/; console.log(regex.test('hi')); // true console.log(regex.test('bye')); // false
$: matnning ohiri mos kelishini aniqlaydi.
var regex = /.com$/; console.log(regex.test('test@email.com')); // true console.log(regex.test('test@email')); // false
{N,} kamida N ta belgi bo’lishini tekshiradi.
var regex = /hi{2,}d/; console.log(regex.test('hiid')); // true console.log(regex.test('hiiid')); // true
{N,M}: belgining minimum N, maksimum M marta bo’lishini tekshiradi.
var regex = /hi{1,2}d/; console.log(regex.test('hid')); // true console.log(regex.test('hiid')); // true console.log(regex.test('hiiid')); // false
Regex’ni tekshirish yoki biror noodatiy regex ishlab chiqish uchun onlayn servislar talaygina. Kamina regextester.comni ishlataman.
Keyingi mavzular regular expressions uchun algoritmlar haqida bo’ladi.