JavaScript: Başlangıçtan İleri Seviyeye
Bölüm 24 / 312 dk okuma

Regex (Düzenli İfadeler)

Pattern matching, capture groups, flags ve String metotlarıyla kullanım.

Regex = bir metin pattern'i tanımlayan dil. Validasyon, çıkarma ve değiştirme için.

Tanımlama

const r1 = /abc/;             // literal sözdizimi
const r2 = new RegExp("abc"); // dinamik

Literal pattern derleme zamanında işlenir, daha hızlı. Sadece pattern dinamik olacaksa RegExp constructor kullan.

Flagler

/abc/i   // case-insensitive
/abc/g   // global (tüm eşleşmeler)
/abc/m   // multiline (^/$ her satır)
/abc/s   // dotall (. yeni satırı da eşler)
/abc/u   // unicode
/abc/y   // sticky (lastIndex'ten başlar)

Yaygın karakterler

.        herhangi bir karakter (yeni satır hariç)
\d       rakam [0-9]
\D       rakam değil
\w       harf/rakam/_
\W       \w değil
\s       boşluk
\S       boşluk değil
\b       kelime sınırı
^        satır/dize başı
$        satır/dize sonu

Quantifier (sayı)

*        0 veya daha fazla
+        1 veya daha fazla
?        0 veya 1 (opsiyonel)
{3}      tam 3
{2,5}    2-5 arası
{2,}     en az 2

Karakter sınıfları

[abc]      a, b veya c
[^abc]     a, b, c değil
[a-z]      a'dan z'ye
[a-zA-Z0-9]

String metotları

match ve matchAll

"merhaba dünya".match(/\w+/g);   // ["merhaba", "dünya"]
 
const text = "id=42, id=99";
const matches = [...text.matchAll(/id=(\d+)/g)];
matches[0][1];  // "42"
matches[1][1];  // "99"

test

/\d+/.test("abc123");  // true

replace ve replaceAll

"merhaba".replace(/a/g, "A");        // "merhAbA"
"merhaba".replaceAll("a", "A");      // string ile çalışır
 
// Capture group geri referansı
"2024-12-25".replace(/(\d{4})-(\d{2})-(\d{2})/, "$3/$2/$1");
// "25/12/2024"
 
// Callback ile
"abc123def456".replace(/\d+/g, (n) => n * 2);
// "abc246def912"

split

"a, b,c , d".split(/\s*,\s*/);  // ["a","b","c","d"]

Capture groups

Numbered

const re = /(\w+)@(\w+\.\w+)/;
const m = "ali@example.com".match(re);
m[0]; // "ali@example.com"
m[1]; // "ali"
m[2]; // "example.com"

Named

const re = /(?<user>\w+)@(?<domain>\w+\.\w+)/;
const { groups } = "ali@example.com".match(re);
groups.user;    // "ali"
groups.domain;  // "example.com"

Non-capturing

/(?:abc)+/   // grupla ama yakalama (performans)

Lookahead / lookbehind

/\d+(?=$)/      // sondaki rakamlar (ileriye bak)
/\d+(?!\.)/     // sonu nokta DEĞİL olan rakamlar
/(?<=\$)\d+/    // önünde $ olan rakamlar (geriye bak)
/(?<!\$)\d+/    // önünde $ OLMAYAN rakamlar

Pratik örnekler

// Email — basit
const isEmail = /^[\w.-]+@[\w-]+\.[\w.-]+$/.test(email);
 
// URL'den slug çıkar
"/blog/how-to-x".match(/\/blog\/([\w-]+)/)?.[1];
 
// Tüm boşlukları tek boşluğa
text.replace(/\s+/g, " ");
 
// CamelCase → kebab-case
"helloWorld".replace(/[A-Z]/g, (c) => "-" + c.toLowerCase());
// "hello-world"
💡İpucu

Regex yazarken regex101.com açık kalsın — pattern'i canlı test eder, ne anlama geldiğini açıklar. Karmaşık regex okumak yazmaktan daha zordur, yorum eklemekten çekinme.

Bu bölümü bitirdin mi?

İlerlemen tarayıcıda saklanır, eğitim listesinde görünür.

Paylaş