Ифодаҳои муқаррарӣ
Ин барои чӣ лозим аст
Усулҳои сатр (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 лозим нест.
Хатоҳои маъмул
- Дар санҷиш
^ва$нест./\d{6}/"abc1234567xyz"-ро мегузаронад: дар он шаш рақам ҳаст. - Нуқтаи бе экран.
/a.b/бо"a-b"ҳам мувофиқ меояд. Нуқтаи айнан —\.. - Байраки
gфаромӯш шуд.replaceбеgтанҳо мувофиқати аввалро иваз мекунад, ваmatchAllбеgхато мепартояд. \wва кириллица.\w— танҳо лотинӣ, рақамҳо ва_. Барои ҳарфҳои тоҷикӣ[А-Яа-яЁёҲҳӮӯӢӣҚқҒғҶҷ]нависед.- Қолаби аз ҳад мураккаб. Агар regex дар сар намеғунҷад — вазифаро ба қадамҳо тақсим кунед: аввал сатрро тоза кунед, баъд санҷед.
Ёддошт
| Чӣ | Чӣ тавр |
|---|---|
| Оё мувофиқат ҳаст | /қолаб/.test(str) |
| Ҳамаи мувофиқатҳо | str.match(/қолаб/g) |
| Бо гурӯҳҳо | [...str.matchAll(/(..)/g)] |
| Ҳамаро иваз кардан | str.replace(/қолаб/g, "нав") |
| Рақам, ҳарф, фосила | \d, \w, \s |
| На рақам | \D |
| Чанд маротиба | +, *, ?, {n}, {n,m} |
| Тамоми сатр | ^…$ |
| Гурӯҳ, «ё» | (…), `a |
| Бе регистр | байраки i |