WALKER

Dasturchi, frilanser, gik va introvert

by Sherzod Shermukhamedov

Regular expressions

dbnauyuy7y1o3k839iny

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.

AmalTartibiREga misolMos keladiMos kelmaydi
concatenation3AABAABAABAABboşqa sözlar
or4AA|BAABAA
BAABboşqa sözlar
closure2AB*AAA
ABBBBBBBAAB
ABABA
parenthesis1A(A|B)AABAAAAB
ABAABboşqa sözlar
parenthesis1(AB)*AA
ABABABABAAA
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.

AmalREga misolMos keladiMos kelmaydi
wildcard.U.U.U.CUMULUS
JUGULUMSUCCUBUS
TUMULTUOUS
character class
(Ranges)[A-Za-z][a-z]*word
CapitalizedcamelCase
4illegal
kamida bittaA(BC)+DEABCDE
ABCBCDEADE
BCDE
aniq miqdorda[0-9]{5}-[0-9]{4}08540-1321
19072-55411111111111
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

AmalREga misolMos keladiMos kelmaydi
g (global)/abc/gabcboşqa sözlar
i (case insensitive)/abc/iabc, Abc, ABc, ABC
aBc, aBC, abCboşqa sözlar
m (multiline search)/abc/mabcboş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.

AmalTartibiREga misolMos keladiMos kelmaydi
concatenation3AABAABAABAABboşqa sözlar
or4AA|BAABAA
BAABboşqa sözlar
closure2AB*AAA
ABBBBBBBAAB
ABABA
parenthesis1A(A|B)AABAAAAB
ABAABboşqa sözlar
parenthesis1(AB)*AA
ABABABABAAA
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.

AmalREga misolMos keladiMos kelmaydi
wildcard.U.U.U.CUMULUS
JUGULUMSUCCUBUS
TUMULTUOUS
character class
(Ranges)[A-Za-z][a-z]*word
CapitalizedcamelCase
4illegal
kamida bittaA(BC)+DEABCDE
ABCBCDEADE
BCDE
aniq miqdorda[0-9]{5}-[0-9]{4}08540-1321
19072-55411111111111
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

AmalREga misolMos keladiMos kelmaydi
g (global)/abc/gabcboşqa sözlar
i (case insensitive)/abc/iabc, Abc, ABc, ABC
aBc, aBC, abCboşqa sözlar
m (multiline search)/abc/mabcboş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.