Muntazam ifodalar (RegExp): test, exec, match va replace metodlari, metabelgilar (\d, \w, \s), flaglar (g, i, m), guruhlar (capture groups) va formalar validatsiyasi.
Bu bob bilan PART 7 (Advanced Concepts) yakunlanadi. Regular Expression (RegExp) — matn ichida naqshlarni (pattern) qidirish, tekshirish va almashtirish uchun ishlatiladigan kuchli vosita.
Regular Expression — matnning ma'lum bir "shakl"ga (pattern) mos kelishini tekshirish uchun ishlatiladigan maxsus belgilar ketma-ketligi.
🔍 RegExp'ni juda aniq "qidiruv shablon"iga o'xshating: oddiy qidiruv faqat aniq so'zni topadi, RegExp esa "har qanday 3 xonali son", "@ belgisiga ega har qanday matn" kabi naqshlarni topa oladi.
script.jsJavaScriptlet pattern1 = /hello/; // literal sintaksislet pattern2 = new RegExp("hello"); // constructor sintaksisi
| Metod | Qayerda ishlatiladi | Vazifasi |
|---|---|---|
regex.test(str) | RegExp'da | true/false qaytaradi (mos keladimi) |
regex.exec(str) | RegExp'da | Mos kelgan qismni topadi, batafsil ma'lumot bilan |
str.match(regex) | Stringda | Mos kelgan qismlarni qaytaradi |
str.replace(regex, new) | Stringda | Mos kelgan qismni almashtiradi |
script.jsJavaScriptlet pattern = /salom/;console.log(pattern.test("salom dunyo")); // trueconsole.log(pattern.test("xayr dunyo")); // falselet text = "Mening emailim ali@example.com";let emailPattern = /\w+@\w+\.\w+/;console.log(text.match(emailPattern)); // ["ali@example.com", ...]
| Belgi | Ma'nosi |
|---|---|
. | Istalgan bitta belgi (yangi qatordan tashqari) |
\d | Istalgan raqam (0-9) |
\D | Raqam bo'lmagan istalgan belgi |
\w | Harf, raqam yoki _ |
\s | Bo'shliq belgisi (probel, tab, yangi qator) |
^ | Matnning boshlanishi |
$ | Matnning tugashi |
* | Oldingi belgi 0 yoki undan ko'p marta |
+ | Oldingi belgi 1 yoki undan ko'p marta |
? | Oldingi belgi 0 yoki 1 marta (ixtiyoriy) |
{n} | Oldingi belgi aynan n marta |
[abc] | a, b yoki c belgilaridan biri |
script.jsJavaScriptlet hasDigit = /\d/;console.log(hasDigit.test("abc123")); // truelet onlyLetters = /^[a-zA-Z]+$/;console.log(onlyLetters.test("Salom")); // trueconsole.log(onlyLetters.test("Salom1")); // false
^[a-zA-Z]+$ — ^ (boshlanish) va $ (tugash) — butun matn faqat harflardan iborat bo'lishini talab qiladi, + esa kamida bitta belgi bo'lishini bildiradi.
Flag — RegExp'ning xatti-harakatini o'zgartiruvchi, /pattern/flag shaklida qo'shiladigan qo'shimcha belgi.
| Flag | Vazifasi |
|---|---|
g | Global — barcha mos kelishlarni topadi, birinchisida to'xtamaydi |
i | Case-insensitive — katta/kichik harfni farqlamaydi |
m | Multiline — ^/$ har bir qatorga alohida qo'llanadi |
script.jsJavaScriptlet text = "cat bat rat";let pattern = /at/;console.log(text.match(pattern));// Faqat BIRINCHI mos kelish: ["at", index: 1, ...]
script.jsJavaScriptlet text = "cat bat rat";let pattern = /at/g;console.log(text.match(pattern)); // ["at", "at", "at"] — BARCHA mos kelishlar
⚠️ Common Mistake
g flag'ini unutish — faqat birinchi mos kelishni topib, qolganlarini "sezmay qolish"ga olib keladi. Agar matndagi barcha mos kelishlar kerak bo'lsa, g flag majburiy.
script.jsJavaScriptlet pattern = /salom/i;console.log(pattern.test("SALOM")); // trueconsole.log(pattern.test("Salom")); // true
Qavslar () — RegExp'da guruh (group) yaratadi, bu qismlarni alohida "ushlab olish" (capture) va ulardan replace() ichida foydalanish imkonini beradi.
script.jsJavaScriptlet date = "2026-09-05";let pattern = /(\d{4})-(\d{2})-(\d{2})/;let formatted = date.replace(pattern, "$3.$2.$1");console.log(formatted); // "05.09.2026"
Uchta guruh ((\d{4}), (\d{2}), (\d{2})) — mos ravishda yil, oy, kunni "ushlab oladi". replace() ichida $1, $2, $3 — mos guruhlarga ishora qiladi, ularni istalgan tartibda qayta joylashtirish mumkin.
code.textTEXT"2026-09-05"│ │ │$1 $2 $3(yil) (oy)(kun)"$3.$2.$1" → "05.09.2026"
script.jsJavaScriptfunction isValidEmail(email) {let pattern = /^[\w.-]+@[\w.-]+\.\w+$/;return pattern.test(email);}console.log(isValidEmail("ali@example.com")); // trueconsole.log(isValidEmail("noto'g'ri-email")); // false
script.jsJavaScriptfunction isValidPhone(phone) {let pattern = /^\+998\d{9}$/;return pattern.test(phone);}console.log(isValidPhone("+998901234567")); // trueconsole.log(isValidPhone("901234567")); // false
🔗 Connection
Bu — Chapter 35'da o'rgangan includes() asosidagi oddiy validatsiyaning ancha aniq va qat'iy alternativi. RegExp — validatsiya qoidalarini juda aniq belgilash imkonini beradi.
script.jsJavaScriptlet text = "Narxi 25000 so'm, chegirma 15%";let numbers = text.match(/\d+/g);console.log(numbers); // ["25000", "15"]
Task:
Berilgan matnda "JavaScript" so'zi borligini (katta/kichik harfga qaramasdan) test() yordamida tekshiring.
Required Concepts:
RegExp.test(), i flag/javascript/iTask:
Berilgan matndan barcha email manzillarini match() va g flag yordamida ajratib oling:
script.jsJavaScriptlet text = "Murojaat uchun: ali@test.com yoki vali@example.uz";
Required Concepts:
match(), g flag/\w+@\w+\.\w+/gTask:
Parol kuchini tekshiruvchi function yozing: parol kamida 8 belgidan iborat, kamida bitta katta harf, kamida bitta kichik harf va kamida bitta raqamga ega bo'lishi kerak. Buni bir nechta alohida RegExp tekshiruvi (yoki bitta murakkab RegExp) orqali amalga oshiring.
Required Concepts:
/[A-Z]/.test(pwd) && /[a-z]/.test(pwd) && /\d/.test(pwd) && pwd.length >= 8script.jsJavaScriptlet text = "2023-01-15, 2024-06-20, 2025-12-31";let pattern = /\d{4}/g;console.log(text.match(pattern));
🧠 Think first! Javobni ko'rishdan oldin kamida 30 soniya o'ylang.
<details> <summary>Answer</summary> ["2023", "2024", "2025"]Why?
\d{4} — aynan 4 ta ketma-ket raqamga mos keladi. g flag tufayli, match() — matndagi barcha shunday mos kelishlarni (uchta yilni) array sifatida qaytaradi.
Quyidagi kodda muammo bor:
script.jsJavaScriptlet text = "cat, bat, hat, mat";let pattern = /at/;let allMatches = text.match(pattern);console.log(allMatches.length); // dasturchi 4 kutgan, lekin xato beradi yoki 1 chiqadi
Your Task:
Yechim:
</details>script.jsJavaScriptlet pattern = /at/g;let allMatches = text.match(pattern);console.log(allMatches.length); // 4console.log(allMatches); // ["at", "at", "at", "at"]
test() — mos kelish-kelmasligini, match()/exec() — mos kelgan qismlarni qaytaradi.g flag — barcha mos kelishlarni, i flag — katta/kichik harfni farqlamasdan qidiradi.()) — matn qismlarini "ushlab olish" va replace()da qayta tartiblash imkonini beradi.g flag ishlatishni unutmang.\d, \w, \s — eng ko'p ishlatiladigan qisqartmalar, ularni yodlab olish foydali.()) va $1, $2 — matnni qayta formatlashda kuchli vosita.script.jsJavaScript/pattern/gi; // global + case-insensitiveregex.test(str); // true/falsestr.match(regex); // mos kelishlar array'istr.replace(regex, new); // almashtirish\d // raqam\w // harf/raqam/_\s // bo'shliq^ // boshlanish$ // tugash+ // 1 yoki ko'p* // 0 yoki ko'p? // 0 yoki 1{n} // aynan n marta
Mavzu bo‘yicha tushunchalaringizni interaktiv test orqali sinovdan o‘tkazing va natijalarni bilib oling.
Darslikda o‘rganilgan qoidalarga asosan real kod yozing, testlardan o‘tkazing va yechimlarni mustahkamlang.
Test Sinovi
Hali topshirilmagan (kamida 75% kerak)
Amaliy Masalalar
0 / 3 ta yechildi (kamida 75% kerak)
Dars sifati va mazmunini yaxshilash uchun o‘z haqqoniy bahoingizni qoldiring.
Mavzuni to‘liq o‘zlashtirish uchun test sinovi, amaliy kodlash va bog‘liq darslar
O‘z bilimingizni interaktiv test savollari orqali tekshiring va darhol xatolarni tahlil qiling.
Nazariyani real kod yozish bilan mustahkamlang, avtomatik testlardan o‘ting va XP to‘plang.
Kurs bo‘yicha keyingi va bog‘liq mavzular: