Regular expressions

Regular expression (yana regex, regexp) - qidiriş patternini belgilab beruvçi belgilar ketma-ketligi. Odatda regex'lar matn içida qidiruv algoritmlarida sözlarni topiş (find), topiş va almaştiriş (find & replace), hamda kiritilgan ma'lumotni tekşiriş uçun işlatiladi.
Regular expressions'ni ifodalaş uçun bir neça amallar kiritilgan.
| Amal | Tartibi | REga misol | Mos keladi | Mos kelmaydi |
|---|---|---|---|---|
| concatenation | 3 | AABAAB | AABAAB | boşqa sözlar |
| or | 4 | AA|BAAB | AA | |
| BAAB | boşqa sözlar | |||
| closure | 2 | AB*A | AA | |
| ABBBBBBBA | AB | |||
| ABABA | ||||
| parenthesis | 1 | A(A|B)AAB | AAAAB | |
| ABAAB | boşqa sözlar | |||
| parenthesis | 1 | (AB)*A | A | |
| ABABABABA | AA | |||
| ABBA |
Concatenation. Aniq bir sözni ifodalaydi. Boşqa sözlar uçrasa mos kelmagan hisoblanadi.
Or. Işlaşi koddagi or operatori bilan bir xil - | belgisi uning ikki tarafidagi şartdan biri mos kelişini tekşiradi. Masalan, AA|BAAB regex uçun AA yoki BAAB sözlari mos keladi.
Closure. * belgisi bilan ifodalanuvçi amal özidan avvalgi belgi yoki birikmaning nol yoki istalgan miqdorda kelişini belgilaydi. Masalan, AB*A regex'da B yöq yoki birneça marta qatnaşgan sözlar mos keladi: AA, ABA, ABBBBA
Parenthesis. Qavslar bilan ifodalanib, içidagi amalning birinçi bölib işlaşini ta'minlaydi (huddi matematika va dasturlaşdagi kabi). Masalan, (AB)A regex uçun AB yöq yoki bir neça marta qatnaşgan hamda A bilan tugagan sözlar mos keladi: AA, ABA, ABABABA. Agar qavslar qöyilmaganda, ya'ni ABA holatida AA, ABA, ABBBAA sözlarini topgan bölardi.
Amallarning bajariliş tartibi - parenthesis (1), closure (2), or (3), concatenation (4).
Qöşimça amallar
Şuningdek, qulaylik uçun qöşimça 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 şaklda yoziş imkoniyati borligida. Masalan (A|B|C|D|E)(A|B|C|D|E)* ni qisqaça qilib [A-E]+ körinişida yozsa böladi.
Flags
| Amal | REga misol | Mos keladi | Mos kelmaydi |
|---|---|---|---|
| g (global) | /abc/g | abc | boşqa sözlar |
| i (case insensitive) | /abc/i | abc, Abc, ABc, ABC | |
| aBc, aBC, abC | boşqa sözlar | ||
| m (multiline search) | /abc/m | abc | boşqa sözlar |
| u (unicode support) | - | - | - |
| s (single line) | - | - | - |
Character groups
Törtburçak qavs içiga olingan belgilar - belgilar guruhi (character groups) deyiladi. Bunda ulardan biri uçrasa yetarli böladi. Masalan [hc]ello - hello va cello sözlarini topadi. jello, ello sözlari mos kelmaydi.
**Negated character groups **
Character groups bilan bir xil va ^ - negativ (inkor qiluvçi) belgi qöşiladi. Bunda törtburçak qavs içida berilgan belgilar yöq bölsa regex mos keladi. Masalan, [^hc]ello uçun hello va cello sözlari topilmaydi, jello sözi mos keladi.
Multiple range item matçes
Agar berilgan range içidan faqat bitta belgini topiş kerak bölsa ^ va `
Regular expression (yana regex, regexp) - qidiriş patternini belgilab beruvçi belgilar ketma-ketligi. Odatda regex'lar matn içida qidiruv algoritmlarida sözlarni topiş (find), topiş va almaştiriş (find & replace), hamda kiritilgan ma'lumotni tekşiriş uçun işlatiladi.
Regular expressions'ni ifodalaş uçun bir neça amallar kiritilgan.
| Amal | Tartibi | REga misol | Mos keladi | Mos kelmaydi |
|---|---|---|---|---|
| concatenation | 3 | AABAAB | AABAAB | boşqa sözlar |
| or | 4 | AA|BAAB | AA | |
| BAAB | boşqa sözlar | |||
| closure | 2 | AB*A | AA | |
| ABBBBBBBA | AB | |||
| ABABA | ||||
| parenthesis | 1 | A(A|B)AAB | AAAAB | |
| ABAAB | boşqa sözlar | |||
| parenthesis | 1 | (AB)*A | A | |
| ABABABABA | AA | |||
| ABBA |
Concatenation. Aniq bir sözni ifodalaydi. Boşqa sözlar uçrasa mos kelmagan hisoblanadi.
Or. Işlaşi koddagi or operatori bilan bir xil - | belgisi uning ikki tarafidagi şartdan biri mos kelişini tekşiradi. Masalan, AA|BAAB regex uçun AA yoki BAAB sözlari mos keladi.
Closure. * belgisi bilan ifodalanuvçi amal özidan avvalgi belgi yoki birikmaning nol yoki istalgan miqdorda kelişini belgilaydi. Masalan, AB*A regex'da B yöq yoki birneça marta qatnaşgan sözlar mos keladi: AA, ABA, ABBBBA
Parenthesis. Qavslar bilan ifodalanib, içidagi amalning birinçi bölib işlaşini ta'minlaydi (huddi matematika va dasturlaşdagi kabi). Masalan, (AB)A regex uçun AB yöq yoki bir neça marta qatnaşgan hamda A bilan tugagan sözlar mos keladi: AA, ABA, ABABABA. Agar qavslar qöyilmaganda, ya'ni ABA holatida AA, ABA, ABBBAA sözlarini topgan bölardi.
Amallarning bajariliş tartibi - parenthesis (1), closure (2), or (3), concatenation (4).
Qöşimça amallar
Şuningdek, qulaylik uçun qöşimça 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 şaklda yoziş imkoniyati borligida. Masalan (A|B|C|D|E)(A|B|C|D|E)* ni qisqaça qilib [A-E]+ körinişida yozsa böladi.
Flags
| Amal | REga misol | Mos keladi | Mos kelmaydi |
|---|---|---|---|
| g (global) | /abc/g | abc | boşqa sözlar |
| i (case insensitive) | /abc/i | abc, Abc, ABc, ABC | |
| aBc, aBC, abC | boşqa sözlar | ||
| m (multiline search) | /abc/m | abc | boşqa sözlar |
| u (unicode support) | - | - | - |
| s (single line) | - | - | - |
Character groups
Törtburçak qavs içiga olingan belgilar - belgilar guruhi (character groups) deyiladi. Bunda ulardan biri uçrasa yetarli böladi. Masalan [hc]ello - hello va cello sözlarini topadi. jello, ello sözlari mos kelmaydi.
**Negated character groups **
Character groups bilan bir xil va ^ - negativ (inkor qiluvçi) belgi qöşiladi. Bunda törtburçak qavs içida berilgan belgilar yöq bölsa regex mos keladi. Masalan, [^hc]ello uçun hello va cello sözlari topilmaydi, jello sözi mos keladi.
Multiple range item matçes
Agar berilgan range içidan faqat bitta belgini topiş kerak bö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-çaracters
\d: istalgan raqam uçun, [0-9] bilan teng.
\D: istalgan raqam bölmagan belgi uçun, [^0-9] bilan teng.
\w: istalgan alphanumeric belgi va "_" (underscore) uçun, [A-Za-z_0-9] bilan teng.
\W: istalgan alphanumeric belgi va "_" (underscore) bölmagan holat uçun, [^A-Za-z_0-9] bilan teng.
\s: probel (whitespace) belgilar uçun: space, tab, yangi qator va unicode space.
\S: whitespace bölmagan belgilar uçun.
\0: null uçun mos keladi.
\n: yangi qator uçun mos keladi.
\t: tab uçun mos keladi.
\uXXXX: XXXX kodli unicode belgi uçun mos keladi (\u bölişi majburiy).
. (nuqta): yangi qatordan taşqari istalgan belgi uçun mos keladi (wildcard).
[^]: istalgan belgi uçun mos keladi (yangi qator belgisi - \n ni ham öz içiga oladi).
Quantifiers
|, {}, * va + quantifier'lar haqida yuqorida töxtaldik. Qolganlari bilan tanişamiz.
?: özidan oldingi belgini 0 va undan köp marta qaytarilişi mumkinligini belgilaydi. * bilan öxşaş.
var regex = /hii?d/;
console.log(regex.test('hid')); // true
console.log(regex.test('hiid')); // true
console.log(regex.test('hiiid')); // false
^: matnning boşini mos kelişini aniqlaydi.
var regex = /^h/;
console.log(regex.test('hi')); // true
console.log(regex.test('bye')); // false
$: matnning ohiri mos kelişini aniqlaydi.
var regex = /.com$/;
console.log(regex.test('test@email.com')); // true
console.log(regex.test('test@email')); // false
{N,} kamida N ta belgi bölişini tekşiradi.
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 bölişini tekşiradi.
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 tekşiriş yoki biror noodatiy regex işlab çiqiş uçun onlayn servislar talaygina. Kamina regextester.comni işlataman.
Keyingi mavzular regular expressions uçun algoritmlar haqida böladi.