Məzmuna keç
Educora
İrəli22 dəq21 / 27

Müntəzəm ifadələr

Mətni müntəzəm ifadələrlə axtar, yoxla və çevir: simvol sinifləri, kəmiyyət göstəriciləri, lövbərlər, qruplar, bayraqlar və `test`, `match`, `matchAll`, `replace` metodları.

Özünü yoxla
Bu dərsdə öyrənəcəksən
  • Simvol sinifləri, kəmiyyət göstəriciləri və lövbərlərlə şablonları oxumaq və yazmaq
  • g, i, m, u bayraqlarından və test, match, matchAll, replace, split metodlarından istifadə etmək
  • Adlı və adsız qruplarla verilənləri çıxarmaq və tipik tələlərdən qaçmaq

Telefon nömrəsinin +994 50 123 45 67 şəklində olduğunu yoxlamaq, paylaşımdakı bütün heşteqləri tapmaq, 2026-09-27 tarixini 27.09.2026-ya çevirmək — adi sətir metodları ilə hər tapşırıq onlarla sətir tələb edir. Müntəzəm ifadə (regular expression, regex) mətn şablonunu bir sətirdə təsvir edir. Əvvəlcə sirli görünür, amma az sayda kərpicdən qurulub — onları tanıyan kimi hər şey oxunaqlı olur.

Regex yaratmaq və ilk metodlar

Regex iki yolla yaradılır: literal /şablon/bayraqlar və ya şablon işləmə vaxtı qurulanda new RegExp('şablon', 'bayraqlar'). Əsas metodlar: regex.test(str) true/false qaytarır; str.match(regex) birinci uyğunluğu (g ilə — hamısını) verir; str.replace(regex, yeni) əvəz edir; str.split(regex) şablona görə bölür.

JavaScript
const text = 'Order 15 arrived. Order 27 is late. Call 555.';

console.log(/late/.test(text));
console.log(/LATE/i.test(text));
console.log(text.match(/\d+/)[0]);
console.log(text.match(/\d+/g));
console.log(text.replace(/Order/g, 'Parcel'));
console.log('a1b22c333'.split(/\d+/));
▸ Gözlənilən nəticə
true
true
15
[ '15', '27', '555' ]
Parcel 15 arrived. Parcel 27 is late. Call 555.
[ 'a', 'b', 'c', '' ]

Kərpiclər

ŞablonMənası
.sətir keçidindən başqa istənilən simvol
\d \w \srəqəm; söz simvolu (latın hərfi, rəqəm, _); boşluq simvolu. Böyük hərf əksini bildirir: \D, \W, \S
[abc] [a-z] [^0-9]çoxluqdan bir simvol; aralıq; çoxluqda olmayan simvol
* + ?0 və ya çox; 1 və ya çox; 0 və ya 1
{3} {2,5}düz 3 dəfə; 2-dən 5-ə qədər
^ $ \bsətrin başlanğıcı; sonu; söz sərhədi
a|b ( ) (?<name> )və ya; qrup; adlı qrup
JavaScript
const patterns = {
  postcode: /^AZ\d{4}$/,
  phone: /^\+994 \d{2} \d{3} \d{2} \d{2}$/,
  username: /^[a-z][a-z0-9_]{2,15}$/,
};

const samples = {
  postcode: ['AZ1000', 'AZ100', 'az1000'],
  phone: ['+994 50 123 45 67', '+994501234567'],
  username: ['leyla_07', '7leyla', 'ab'],
};

for (const [name, regex] of Object.entries(patterns)) {
  const results = samples[name].map((value) => `${value}: ${regex.test(value)}`);
  console.log(`${name} -> ${results.join(', ')}`);
}
▸ Gözlənilən nəticə
postcode -> AZ1000: true, AZ100: false, az1000: false
phone -> +994 50 123 45 67: true, +994501234567: false
username -> leyla_07: true, 7leyla: false, ab: false
+ xüsusi simvol olduğu üçün hərfən axtarmaq üçün \+ yazılır. İstifadəçi adı hərflə başlamalı və cəmi 3–16 simvol olmalıdır.

Bayraqlar

  • g — qlobal: bütün uyğunluqlar (matchAll və regex ilə işlədilən replaceAll üçün lazımdır);
  • i — böyük-kiçik hərf fərqi nəzərə alınmır;
  • m — çoxsətirli: ^ və $ hər sətrin başlanğıcı və sonudur;
  • s — . sətir keçidinə də uyğun gəlir;
  • u — Unicode: emoji və \p{L} (istənilən əlifbanın hərfi) düzgün işləyir.
JavaScript
const words = 'Gəncə şəhəri';

console.log(words.match(/\w+/g));
console.log(words.match(/\p{L}+/gu));

const poem = 'first line\nsecond line\nthird line';
console.log(poem.match(/^\w+/gm));
▸ Gözlənilən nəticə
[ 'G', 'nc', 'h', 'ri' ]
[ 'Gəncə', 'şəhəri' ]
[ 'first', 'second', 'third' ]
\w yalnız ingilis əlifbasının hərflərini tanıyır, ona görə «ə» və «ş» sözləri parçalayır. Azərbaycan, rus və türk mətnləri üçün \p{L} və u bayrağını işlət.

Qruplar və əvəzetmə

Mötərizələr uyğunluğun hissələrini tutur. g-siz match massiv qaytarır: [tam uyğunluq, qrup1, qrup2, ...], adlı qruplar isə .groups-dadır. matchAll (g tələb edir) bütün uyğunluqları qrupları ilə birlikdə verir. replace-də $1 və $<ad> qruplara istinad edir, əvəzedici funksiya isə uyğunluğu və qrupları arqument kimi alır.

JavaScript
const date = '2026-09-27';
const match = date.match(/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/);

console.log(match[1], match.groups.month, match.groups.day);
console.log(date.replace(/(\d{4})-(\d{2})-(\d{2})/, '$3.$2.$1'));

const post = 'Learning #javascript and #regex at #Educora';
const tags = [...post.matchAll(/#(\w+)/g)].map((m) => m[1].toLowerCase());
console.log(tags);

const prices = 'tea 2 AZN, bread 1 AZN';
console.log(prices.replace(/(\d+) AZN/g, (whole, amount) => `${amount * 2} AZN`));
▸ Gözlənilən nəticə
2026 09 27
27.09.2026
[ 'javascript', 'regex', 'educora' ]
tea 4 AZN, bread 2 AZN
JavaScript
const html = '<b>bold</b> and <i>italic</i>';
console.log(html.match(/<.*>/)[0]);
console.log(html.match(/<.*?>/g));

const hasDigit = /\d/g;
console.log(hasDigit.test('a1'), hasDigit.test('a1'), hasDigit.test('a1'));

console.log('1.5'.match(/\d.\d/)[0], '1x5'.match(/\d.\d/)[0], /\d\.\d/.test('1x5'));
▸ Gözlənilən nəticə
<b>bold</b> and <i>italic</i>
[ '<b>', '</b>', '<i>', '</i>' ]
true false true
1.5 1x5 false
Tapşırıq

isStrongPassword(password) funksiyasını yaz: parol ən azı 8 simvoldan ibarət olmalı, ən azı bir rəqəm və bir böyük latın hərfi olmalıdır. Hər şərt üçün ayrıca regex və test işlət.

Tapşırıq · JavaScript
function isStrongPassword(password) {
  // 8+ characters, a digit, an uppercase letter
}

for (const password of ['secret', 'Secret123', 'secretpass1', 'SECRETPASS']) {
  console.log(`${password}: ${isStrongPassword(password)}`);
}
▸ Gözlənilən nəticə
secret: false
Secret123: true
secretpass1: false
SECRETPASS: false
Tapşırıq

Mətndəki bütün GG.AA.İİİİ tarixlərini ISO formatına — İİİİ-AA-GG — çevir və nəticəni çap et. Sonra mətndə neçə tarix olduğunu Dates: N şəklində çap et.

Tapşırıq · JavaScript
const text = 'Exams: 05.06.2026 and 12.06.2026. Holidays from 20.06.2026.';

// 1) replace every DD.MM.YYYY with YYYY-MM-DD and print the text
// 2) print Dates: N
▸ Gözlənilən nəticə
Exams: 2026-06-05 and 2026-06-12. Holidays from 2026-06-20.
Dates: 3

Əsas fikirlər

  • Regex mətn şablonudur: /şablon/bayraqlar və ya new RegExp(...).
  • Kərpiclər: siniflər (\d, \w, [a-z]), kəmiyyət göstəriciləri (+, *, ?, {n,m}), lövbərlər (^, $, \b), qruplar və |.
  • Bayraqlar: g — hamısı, i — böyük-kiçik hərfə baxmadan, m — çoxsətirli, u — Unicode (\p{L}).
  • test yoxlayır, match/matchAll çıxarır, replace isə $1, $<ad> və ya funksiya ilə çevirir.
  • Yoxlama şablonlarını lövbərlə; acgöz .*, g ilə test-dəki lastIndex və ekranlaşdırılmamış xüsusi simvollardan ehtiyat et.

Özünü yoxla

10 sual. Hər düzgün cavab XP qazandırır.

1 / 10
/^\d{3}$/ hansı sətrə uyğundur?