- Karakter sınıfları, niceleyiciler ve çapalarla kalıpları okumak ve yazmak
g,i,m,ubayraklarını vetest,match,matchAll,replace,splitmetotlarını kullanmak- Yakalayan ve adlandırılmış gruplarla veri çıkarmak ve tipik tuzaklardan kaçınmak
Bir telefon numarasının +994 50 123 45 67 biçiminde olduğunu kontrol etmek, bir gönderideki tüm hashtag'leri bulmak, 2026-09-27 tarihini 27.09.2026'ya çevirmek: sıradan string metotlarıyla her iş onlarca satır tutar. Bir düzenli ifade (regular expression, regex) bir metin kalıbını tek satırda tanımlar. İlk başta şifreli görünür, ama küçük bir yapı taşı setinden oluşur; onları tanıyınca her şey okunur hâle gelir.
Regex oluşturmak ve ilk metotlar
Bir regex iki yolla oluşturulur: /kalıp/bayraklar literali ya da kalıp çalışma sırasında kuruluyorsa new RegExp('kalıp', 'bayraklar'). Ana metotlar: regex.test(str) true/false döndürür; str.match(regex) ilk eşleşmeyi (g ile hepsini) verir; str.replace(regex, yeni) değiştirir; str.split(regex) kalıba göre böler.
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+/));▸ Beklenen çıktı
true true 15 [ '15', '27', '555' ] Parcel 15 arrived. Parcel 27 is late. Call 555. [ 'a', 'b', 'c', '' ]
Yapı taşları
| Kalıp | Anlamı |
|---|---|
. | satır sonu dışında herhangi bir karakter |
\d \w \s | rakam; kelime karakteri (Latin harf, rakam, _); boşluk karakteri. Büyük harf tersini belirtir: \D, \W, \S |
[abc] [a-z] [^0-9] | kümeden bir karakter; bir aralık; kümede olmayan bir karakter |
* + ? | 0 ya da daha fazla; 1 ya da daha fazla; 0 ya da 1 |
{3} {2,5} | tam 3 kez; 2'den 5'e kadar |
^ $ \b | string'in başı; sonu; kelime sınırı |
a|b ( ) (?<name> ) | ya da; grup; adlandırılmış grup |
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(', ')}`);
}▸ Beklenen çıktı
postcode -> AZ1000: true, AZ100: false, az1000: false phone -> +994 50 123 45 67: true, +994501234567: false username -> leyla_07: true, 7leyla: false, ab: false
+ özel bir karakter olduğundan onu harfiyen aramak için \+ yazılır. Kullanıcı adı bir harfle başlamalı ve toplam 3–16 karakter olmalıdır.Bayraklar
g— global: tüm eşleşmeler (matchAllve regex ilereplaceAlliçin gerekir);i— büyük/küçük harf farkı gözetilmez;m— çok satırlı:^ve$her satırın başı ve sonudur;s—.satır sonuyla da eşleşir;u— Unicode: emojiler ve\p{L}(herhangi bir alfabenin harfi) doğru çalışır.
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));▸ Beklenen çıktı
[ 'G', 'nc', 'h', 'ri' ] [ 'Gəncə', 'şəhəri' ] [ 'first', 'second', 'third' ]
\w yalnızca İngiliz alfabesinin harflerini tanır; bu yüzden onun dışındaki harfler kelimeleri böler. Azerbaycanca, Rusça ya da Türkçe metinler için u bayrağıyla \p{L} kullan.Gruplar ve değiştirme
Parantezler eşleşmenin parçalarını yakalar. g olmadan match bir dizi döndürür: [tam eşleşme, grup1, grup2, ...]; adlandırılmış gruplar ise .groups içindedir. matchAll (g gerektirir) tüm eşleşmeleri gruplarıyla birlikte verir. replace içinde $1 ve $<ad> gruplara başvurur, değiştirici fonksiyon ise eşleşmeyi ve grupları argüman olarak alır.
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`));▸ Beklenen çıktı
2026 09 27 27.09.2026 [ 'javascript', 'regex', 'educora' ] tea 4 AZN, bread 2 AZN
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'));▸ Beklenen çıktı
<b>bold</b> and <i>italic</i> [ '<b>', '</b>', '<i>', '</i>' ] true false true 1.5 1x5 false
isStrongPassword(password) fonksiyonunu yaz: parola en az 8 karakter olmalı, en az bir rakam ve bir büyük Latin harf içermeli. Her kural için ayrı bir regex ve test kullan.
function isStrongPassword(password) {
// 8+ characters, a digit, an uppercase letter
}
for (const password of ['secret', 'Secret123', 'secretpass1', 'SECRETPASS']) {
console.log(`${password}: ${isStrongPassword(password)}`);
}▸ Beklenen çıktı
secret: false Secret123: true secretpass1: false SECRETPASS: false
Metindeki tüm GG.AA.YYYY tarihlerini ISO biçimine, yani YYYY-AA-GG'ye çevir ve sonucu yazdır. Sonra metinde kaç tarih olduğunu Dates: N biçiminde yazdır.
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▸ Beklenen çıktı
Exams: 2026-06-05 and 2026-06-12. Holidays from 2026-06-20. Dates: 3
Önemli noktalar
- Regex bir metin kalıbıdır:
/kalıp/bayraklarya danew RegExp(...). - Yapı taşları: sınıflar (
\d,\w,[a-z]), niceleyiciler (+,*,?,{n,m}), çapalar (^,$,\b), gruplar ve|. - Bayraklar:
gtüm eşleşmeler,ibüyük/küçük harf duyarsız,mçok satırlı,uUnicode (\p{L}). testkontrol eder,match/matchAllçıkarır,replaceise$1,$<ad>ya da bir fonksiyonla dönüştürür.- Doğrulama kalıplarını çapala; açgözlü
.*'a,gvetestilelastIndex'e ve kaçışsız özel karakterlere dikkat et.
Kendini test et
10 soru. Her doğru cevap XP kazandırır.
/^\d{3}$/ hangi string'le eşleşir?