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"); // dinamikLiteral 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 sonuQuantifier (sayı)
* 0 veya daha fazla
+ 1 veya daha fazla
? 0 veya 1 (opsiyonel)
{3} tam 3
{2,5} 2-5 arası
{2,} en az 2Karakter 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"); // truereplace 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 rakamlarPratik ö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.