Гузариш ба мундариҷа
Мавзӯи 20 аз 21
Назария

Ифодаҳои муқаррарӣ

Ин барои чӣ лозим аст

Усулҳои сатр (includes, indexOf, split) матни мушаххас-ро меҷӯянд. Аммо аксар вақт матни намуди муайян-ро ёфтан лозим аст: «шаш рақам паси ҳам», «калима баъд аз #», «чизе монанди email». Барои ин ифодаҳои муқаррарӣ (regular expressions, кӯтоҳ regex) ҳастанд — забони хурди қолабҳо.

Онҳо дар ҳама ҷо вомехӯранд: санҷиши майдонҳои форма (email, телефон, парол), ҷустуҷӯ ва ивазкунӣ дар муҳаррири код, таҳлили логҳо, коркарди додаҳо аз сайтҳо. Regex-ро аз ёд донистан шарт нест, вале хондан ва навиштани қолабҳои соддаро ҳар барномасоз бояд донад.

Қолабро чӣ тавр навиштан

Ифодаи муқарраириро байни ду хати моил менависанд. Усули test ҷавоб медиҳад, ки оё дар сатр мувофиқат ҳаст:

const pattern = /гурба/;
console.log(pattern.test("Гурбаи ман хоб аст, гурба ором аст"));
console.log(pattern.test("Саги ман хоб аст"));

Натиҷа:

true
false

Баъд аз хати дуюм байрақҳо-ро менависанд: /гурба/i — бе назардошти регистр, /гурба/g — ҳамаи мувофиқатҳоро ҷустан, на танҳо аввалинро.

Синфҳои аломатҳо

Ба ҷойи ҳарфи мушаххас намуди аломатро нишон додан мумкин аст:

Қолаб Чӣ мувофиқ меояд
\d рақам 0–9
\w ҳарфи лотинӣ, рақам ё _
\s аломати фосила: фосила, табулятсия, гузариш ба сатри нав
\D, \W, \S баръакс: на рақам, на ҳарф, на фосила
. ҳар аломат, ба ғайр аз гузариш ба сатри нав
[abc] яке аз аломатҳои a, b, c
[a-z], [0-9] диапазон
[^0-9] ҳар кадом, ба ғайр аз номбаршудаҳо
console.log(/\d\d:\d\d/.test("Вохӯрӣ соати 14:30"));
console.log(/[аеиоуӯ]/i.test("САЛОМ"));

Натиҷа:

true
true

Нуқта, қавсҳо, +, ? ва аломатҳои дигар маънои махсус доранд. Барои ёфтани онҳо айнан, пеш аз онҳо хати моили баръакс мегузоранд: \. — маҳз нуқта, \( — маҳз қавс.

Квантификаторҳо: чанд маротиба

Қолаб Чанд
a+ як ё зиёдтар
a* сифр ё зиёдтар
a? сифр ё як (ихтиёрӣ)
a{3} маҳз 3
a{2,4} аз 2 то 4
a{2,} 2 ва зиёдтар
console.log("Нархҳо: 5, 120 ва 3500 сомонӣ".match(/\d+/g));
console.log(/^colou?r$/.test("color"), /^colou?r$/.test("colour"));

Натиҷа:

["5","120","3500"]
true true

Аввал ва охири сатр

^ аввали сатрро, $ — охирро нишон медиҳад. Бе онҳо қолаб мувофиқатро дар ҳар ҷо-и дохили сатр меҷӯяд — сабаби маъмули хатоҳо ҳангоми санҷиши формаҳо:

console.log(/\d{4}/.test("соли 2026!"));     // чор рақам дар ягон ҷои дохил
console.log(/^\d{4}$/.test("соли 2026!"));   // тамоми сатр аз чор рақам
console.log(/^\d{4}$/.test("2026"));

Натиҷа:

true
false
true

Гурӯҳҳо ва «ё»

Қавсҳои доирашакл қисми қолабро ба гурӯҳ муттаҳид мекунанд: ба он квантификатор татбиқ кардан мумкин аст ва мундариҷаи онро алоҳида гирифтан мумкин аст. Хати амудӣ | маънои «ё»-ро дорад:

console.log(/^(ha)+$/.test("hahaha"));
console.log(/^(cat|dog)s?$/.test("dogs"));

const m = "Сана: 2026-11-02".match(/(\d{4})-(\d{2})-(\d{2})/);
console.log(m[0]);            // тамоми мувофиқат
console.log(m[1], m[2], m[3]); // гурӯҳҳо бо тартиб

Натиҷа:

true
true
2026-11-02
2026 11 02

Ба гурӯҳҳо ном додан мумкин аст — он гоҳ код беҳтар хонда мешавад:

const { groups } = "2026-11-02".match(/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/);
console.log(groups.day + "." + groups.month + "." + groups.year);

Натиҷа:

02.11.2026

Усулҳо: ёфтани ҳамаи мувофиқатҳо

Усул Чӣ мекунад
regex.test(str) оё мувофиқат ҳаст → true / false
str.match(regex) бе g: мувофиқати аввал бо гурӯҳҳо (ё null); бо g: массиви ҳамаи мувофиқатҳо
str.matchAll(regex) ҳамаи мувофиқатҳо бо гурӯҳҳо (байраки g лозим)
str.replace(regex, иваз) иваз кардан (ҳамаро — бо байраки g)
str.split(regex) аз рӯи қолаб тақсим кардан

matchAll ҳамаи мувофиқатҳоро аз назар мегузаронад, ва ҳар кадом гурӯҳҳо дорад:

const text = "Аня: 5, Тимур: 4, Лола: 5";
for (const m of text.matchAll(/([А-Яа-яЁё]+): (\d)/g)) {
  console.log(m[1] + " баҳои " + m[2] + " гирифт");
}

Натиҷа:

Аня баҳои 5 гирифт
Тимур баҳои 4 гирифт
Лола баҳои 5 гирифт

Барои гирифтани массив мувофиқатҳоро бо spread мекушоянд: [...text.matchAll(/…/g)].

Ҳарисӣ

Квантификаторҳои + ва * ҳарис-анд: ҳарчи бештар аломат мегиранд. Баъзан ин он чизе нест, ки лозим аст:

const html = "<b>як</b> ва <b>ду</b>";
console.log(html.match(/<b>.+<\/b>/)[0]);    // ҳарисона: аз <b>-и аввал то </b>-и охир
console.log(html.match(/<b>.+?<\/b>/)[0]);   // ? баъд аз + — ҳарчи камтар

Натиҷа:

<b>як</b> ва <b>ду</b>
<b>як</b>

Ин дарси асосии regex аст: қолаб маҳз он чиро, ки навишта шудааст, иҷро мекунад. Аломатҳои иҷозатдодашударо ҳарчи дақиқтар тасвир кунед ва қолабро дар якчанд мисол санҷед.

Ивазкунӣ

Дар replace гурӯҳҳоро гузоштан мумкин аст: $1, $2… — ё функсияе додан, ки ивазро бармегардонад:

console.log("2026-11-02".replace(/(\d{4})-(\d{2})-(\d{2})/, "$3.$2.$1"));
console.log("   фосилаҳои    бисёр   ".trim().replace(/\s+/g, " "));
console.log("нарх 100 ва 250".replace(/\d+/g, (n) => n * 2));

Натиҷа:

02.11.2026
фосилаҳои бисёр
нарх 200 ва 500

Ва тақсим аз рӯи қолаб — масалан, аз рӯи вергулҳо бо ҳар гуна фосила дар атрофашон:

console.log("себ ,нок,  олу".split(/\s*,\s*/));

Натиҷа:

["себ","нок","олу"]

Дар дохил чӣ гуна кор мекунад

Муҳаррики ифодаҳои муқаррарӣ аз рӯи сатр аз чап ба рост меравад ва дар ҳар мавқеъ кӯшиш мекунад қолабро «мувофиқ кунад». Квантификаторҳо пешфарз ҳарис-анд: .+ аввал ҳама чизро то охири сатр мегирад, баъд аломатҳоро бозмегардонад, то боқимондаи қолаб мувофиқ ояд. Агар ҳарчи камтар гирифтан лозим бошад, баъд аз квантификатор ? мегузоранд: .+?.

Ифодаи муқаррарӣ бо байраки g дар хотир дорад, ки дар куҷо истод (хосияти lastIndex). Барои ҳамин ҳамон як объекти /…/g ҳангоми даъватҳои такрории test метавонад ҷавобҳои гуногун диҳад. Барои санҷишҳои test байраки g лозим нест.

Хатоҳои маъмул

  1. Дар санҷиш ^ ва $ нест. /\d{6}/ "abc1234567xyz"-ро мегузаронад: дар он шаш рақам ҳаст.
  2. Нуқтаи бе экран. /a.b/ бо "a-b" ҳам мувофиқ меояд. Нуқтаи айнан — \..
  3. Байраки g фаромӯш шуд. replace бе g танҳо мувофиқати аввалро иваз мекунад, ва matchAll бе g хато мепартояд.
  4. \w ва кириллица. \w — танҳо лотинӣ, рақамҳо ва _. Барои ҳарфҳои тоҷикӣ [А-Яа-яЁёҲҳӮӯӢӣҚқҒғҶҷ] нависед.
  5. Қолаби аз ҳад мураккаб. Агар regex дар сар намеғунҷад — вазифаро ба қадамҳо тақсим кунед: аввал сатрро тоза кунед, баъд санҷед.

Ёддошт

Чӣ Чӣ тавр
Оё мувофиқат ҳаст /қолаб/.test(str)
Ҳамаи мувофиқатҳо str.match(/қолаб/g)
Бо гурӯҳҳо [...str.matchAll(/(..)/g)]
Ҳамаро иваз кардан str.replace(/қолаб/g, "нав")
Рақам, ҳарф, фосила \d, \w, \s
На рақам \D
Чанд маротиба +, *, ?, {n}, {n,m}
Тамоми сатр ^…$
Гурӯҳ, «ё» (…), `a
Бе регистр байраки i

Индекси почта

Осон+10 XP

Функсияи isPostalCode(text)-ро нависед: агар сатр маҳз шаш рақам бошад ва дигар ҳеҷ чиз, true баргардонед, вагарна false.

isPostalCode("734025")    → true
isPostalCode("73402")     → false   (панҷ рақам)
isPostalCode("734 025")   → false   (фосила)

Барои ҳал кардани масъалаҳо коннекторро пайваст кун

Коди масъалаҳо дар компютери худат иҷро мешавад — ин аз браузер тезтар ва боэътимодтар аст. Барои ин барномаи ройгони коннектори CodeWithMe лозим аст. Онро як бор пайваст кардан кифоя аст.

Коннекторро дар ин компютер ҷустуҷӯ мекунем…

  1. 1
    Коннекторро барои системаи худ (Windows, macOS ё Linux) зеркашӣ кун.Зеркашии коннекторДар саҳифаи зеркашӣ файлеро интихоб кун, ки дар номаш системаи ту ҳаст, масалан windows-amd64.
  2. 2Онро иҷро кун ва ҷузвдонеро интихоб кун, ки ҳалҳоят дар он ҷо меистанд. Python ва Node.js-ро ӯ худаш ҳангоми зарурат ба он ҷо мегузорад.
  3. 3
    Дар поён рамзи 6-рақамаро ворид кун — он дар равзанаи коннектор навишта шудааст («Рамз барои сайти CodeWithMe»). Агар браузер дар бораи дастрасӣ ба шабакаи маҳаллӣ пурсад — иҷозат деҳ.

Коннектор кушода аст (рамзи манбаъ дар GitHub), танҳо дар компютери ту кор мекунад ва кодро танҳо пас аз ворид кардани рамзи пайвастшавӣ иҷро мекунад.