Ana Sayfa › Blog › Regex Çözüm Rehberi
Geliştirici Araçları

Regex Neden Eşleşmiyor? Bayraklar, Satır Sonları ve Kaçış Karakterleri

Yayınlanma: 17 Ekim 2026 • Güncellenme: 17 Ekim 2026 • Hazırlayan: GoToolstack Teknik Ekibi • GoToolstack Regex Test Edici ile Doğrulandı
Düzenli ifadenizi canlı olarak test edin: Anlık eşleşme vurgulama, yakalama grubu dökümü ve ReDoS zaman aşımı korumasıyla doğrudan tarayıcınızda deneyin.
Regex Test Ediciyi Aç
İçindekiler
  1. Doğrudan Teşhis: Geçerli Görünen Bir Regex Neden Eşleşmez?
  2. Temel Bayraklar: g, i, m ve s (m ile s Bayraklarını Karıştırmayın)
  3. Açgözlü (.*) ile Tembel (.*?) Nicelik Belirteçleri
  4. Kaçış Karakterleri ve Ters Eğik Çizgi Tuzağı (Karakter Sınıfı vs. Dış Bağlam)
  5. GoToolstack Motorunda Doğrulanmış Gerçek Örnekler
  6. Motor Farklılıkları ve ReDoS Felaketi
  7. GoToolstack İstemci Taraflı Geliştirici Araçları
  8. Teknik Referanslar ve Resmi Standartlar

1. Doğrudan Teşhis: Geçerli Görünen Bir Regex Neden Eşleşmez?

Sözdizimsel olarak hatasız görünen bir düzenli ifade (Regex); eksik bayraklar, beklenmeyen satır sonları veya yanlış kaçış karakterleri nedeniyle çalışmayabilir. Deseniniz 0 eşleşme veriyorsa veya tek bir kelime yerine tüm metni yutuyorsa, sorun neredeyse her zaman regex motorunun metni tarama kurallarından kaynaklanır.

Deseninizi baştan yazmadan önce şu temel yürütme mekanizmalarını sırayla inceleyin:

2. Temel Bayraklar: g, i, m ve s (m ile s Bayraklarını Karıştırmayın)

Bayraklar motorun çalışma kurallarını belirler. JavaScript (ve ECMAScript standardında) en yaygın kullanılan temel bayraklar şunlardır:

Tek satırlı ve çok satırlı m bayrağı ile regex çapa karakteri eşleşme şeması
Görsel 1: Regex çapa karakterlerinin tek satırlı girdi ile m (çok satırlı) bayrağı altındaki satır başı eşleşme farkı.
  • g (Global): İlk eşleşmede durmak yerine aramanın metnin tamamı boyunca devam etmesini sağlar.
  • i (Büyük/Küçük Harf Duyarsız): Harf duyarlılığını kaldırır, büyük ve küçük harfleri eşit kabul eder.
  • m (Çok Satırlı): ^ ve $ işaretlerinin yalnızca tüm metnin değil, her bir satırın başı ve sonu ile eşleşmesini sağlar.
  • s (dotAll): Nokta (.) karakterinin yeni satır (\n, \r) karakterlerini de kapsamasını sağlar.

KRİTİK FARK: Çok satırlı (m) bayrağı noktanın (.) yeni satırları geçmesini SAĞLAMAZ! Benzer şekilde dotAll (s) bayrağı da ^ ve $ işaretlerinin satır başı/sonu yakalamasını DEĞİŞTİRMEZ. Bu iki bayrağı karıştırmak çok satırlı Regex hatalarının bir numaralı sebebidir.

3. Açgözlü (.*) ile Tembel (.*?) Nicelik Belirteçleri

Varsayılan olarak *, +, {min,max} nicelik belirteçleri açgözlüdür (greedy): sonraki kuralları karşılamak için geriye doğru adım atmadan önce tüketebilecekleri maksimum karakteri alırlar.

Şu metinden HTML etiketlerini ayrıştırdığınızı varsayın: <div>İlk</div><div>İkinci</div>

Açgözlü Desen <div>.*</div>: İlk açılış etiketinden en sondaki kapanış etiketine kadar tüm metni tek bir blok olarak yutar.

Tembel Desen <div>.*?</div>: Soru işareti eklenerek tembel (lazy) hale getirilen desen, ilk kapanış etiketinde durur (<div>İlk</div>). Ancak metindeki her iki bağımsız eşleşmeyi de yakalayabilmek için global bayrağın (g) eklenmesi zorunludur (/<div>.*?</div>/g). Global bayrak olmadan regex motoru ilk eşleşmeden sonra aramayı derhal sonlandırır.

4. Kaçış Karakterleri ve Ters Eğik Çizgi Tuzağı (Karakter Sınıfı vs. Dış Bağlam)

Düzenli ifadelerde sözdizimsel rezerve karakterler şunlardır: \ ^ $ . | ? * + ( ) [ { } ]. Kaçış kuralları bağlama göre değişiklik gösterir:

  • Karakter Sınıfları Dışında: Bu karakterlerin tümü düz noktalama olarak aranırken ters eğik çizgiyle (örneğin \., \$, \() kaçırılmalıdır.
  • Karakter Sınıfları İçinde ([...]): Çoğu metakarakter özel anlamını kaybeder ve düz metin gibi eşleşir (örneğin [.] doğrudan nokta, [*] doğrudan yıldız eşler). Köşeli parantez içinde yalnızca ^ (başta ise olumsuzlama), - (aralık belirteci), ] (sınıf kapatıcı) ve \ (kaçış) özel anlama sahiptir.

JavaScript kaynak kodunda doğrudan regex literali ile dize yapıcı (new RegExp()) ayrımına dikkat edin:

// 1. Regex Literal (single backslash required)
const reLiteral = /^\d+\.\d+$/;

// 2. String Constructor (double backslash mandatory)
const reConstructor = new RegExp("^\\d+\\.\\d+$");

5. GoToolstack Motorunda Doğrulanmış Gerçek Örnekler

Aşağıdaki senaryolar ECMAScript motorunda gerçek girdiler ve beklenen çıktılarla doğrulanmıştır:

Senaryo ve Girdi Desen ve Bayraklar Doğrulanmış Beklenen Eşleşme
ERROR 404 /api\nINFO 200 /home\nERROR 500 /db /^ERROR\s+(\d+)/gm ERROR 404, ERROR 500
Total cost: $49.99 USD /\$(\d+\.\d{2})/ $49.99
/* Multi-line
  comment */
/\/\*.*?\*\//s /* Multi-line
  comment */

6. Motor Farklılıkları ve ReDoS Felaketi

GoToolstack düzenli ifade test edicisi tarayıcınızın yerel ECMAScript motorunu kullanır. Python, PCRE veya Go'dan desen aktarırken şu sınırlara dikkat edin:

  • Lookbehind Desteği: Modern ECMAScript pozitif (?<=...) ve negatif (?<!...) lookbehind ifadelerini destekler. Eski tarayıcılarda sözdizimi hatası verebilir.
  • İyelik Nicelikleri Yoktur: JavaScript motorunda PCRE'de bulunan iyelik nicelikleri (.*+) veya atomik gruplar (?>...) bulunmaz.
  • Felaket Düzeyinde Geri İzleme (ReDoS): (a+)+$ gibi iç içe açgözlü desenler eşleşmeyen dizelerde katlanarak milyarlarca kombinasyon dener ve tarayıcıyı kilitler. GoToolstack testleri Web Worker içinde zaman aşımı korumasıyla izole eder.
  • Kusursuz E-posta Efsanesi: Yüzlerce karakterlik devasa regex'lerle RFC 5322 standardını tek seferde doğrulama çabaları bakım zorluğu ve performans riski yaratır. Basit yapısal kontrol ve onay e-postası göndermek endüstri standardıdır.

7. GoToolstack İstemci Taraflı Geliştirici Araçları

Düzenli ifadelerinizi tarayıcınızda sunucuya göndermeden güvenle test edin ve oluşturun:

Teknik Referanslar ve Resmi Standartlar