1. Regex Motor Mimarisi: NFA (Non-deterministic Finite Automaton)
JavaScript, Python, PHP ve Java gibi dillerin regex motorları 'Non-deterministic Finite Automaton' (NFA) prensibiyle çalışır. NFA motorları desendeki her alternatifi sırayla dener. Eşleşme başarısız olduğunda bir önceki karar noktasına geri dönerek diğer ihtimalleri test eder; bu işleme Geriye İzleme (Backtracking) adı verilir.
Geriye izleme adımları doğru sınırlandırılmadığında, girdi metni uzadıkça denenmesi gereken kombinasyon sayısı üstel olarak artar (O(2^n)) ve tarayıcı veya backend sunucusu dakikalarca yanıt veremez hale gelir.
2. İleri Düzey Desenler: Lookahead, Lookbehind ve Non-Capturing Gruplar
Verileri doğrulamak ve ayıklamak için imleci ilerletmeden kontrol sağlayan ileri düzey regex teknikleri kullanılır:
Pozitif Lookahead (?=...) ve Negatif Lookahead (?!...): İmleci tüketmeden önündeki karakterlerin belirli bir kurala uyup uymadığını denetler. Örneğin güçlü parola doğrulama kuralları için vazgeçilmezdir.
Yakalamayan Gruplar (?:...): Parantez içindeki ifadeyi gruplar ancak yakalama belleğine (capturing group) almaz. Bu durum motorun bellek tahsisini azaltarak Regex çalışma hızını %20-30 oranında artırır.
// 1. Güvenli Parola Doğrulama:
// En az 8 karakter, 1 büyük harf, 1 küçük harf, 1 rakam ve 1 özel karakter
const STRONG_PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,64}$/;
// 2. RFC 5322 Uyumlu Sadeleştirilmiş E-posta Doğrulama:
const EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/;
// 3. Binlik Basamak Ayracı (Pozitif Lookahead):
function formatCurrency(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ".");
}3. ReDoS (Regular Expression Denial of Service) Tehdidi
İç içe geçmiş tekrarlayıcılar (nested quantifiers) içeren desenler ReDoS saldırılarına karşı son derece savunmasızdır. Örneğin /^(a+)+$/ deseni ele alındığında, 'aaaaaaaaaaaaaaaaaaaa!' gibi sonu eşleşmeyen bir girdi gönderildiğinde motor milyonlarca permütasyonu dener ve CPU'yu %100 tüketir.
Saldırganlar bu açığı kullanarak web sunucularının tüm çekirdeklerini kilitleyebilir ve hizmet kesintisine (DDoS) yol açabilir.
4. JavaScript'te Regex Performans Optimizasyonları
Performans açısından en sık yapılan hatalardan biri, döngü veya sık çağrılan fonksiyonlar içinde sürekli new RegExp() nesnesi üretmektir. Bu durum her çağrıda regex motorunun deseni baştan derlemesine ve çöp toplayıcının (Garbage Collector) aşırı çalışmasına neden olur:
Regex desenleri daima modül düzeyinde statik olarak tanımlanmalı veya /pattern/g biçiminde sabit bir değişken olarak saklanmalıdır.
// ❌ YANLIŞ YAKLAŞIM (Her satırda baştan derlenir):
function validateLinesBad(lines) {
return lines.filter(line => new RegExp('^[A-Z]{3}-\d{4}$').test(line));
}
// ✅ DOĞRU YAKLAŞIM (Statik olarak tek kez derlenir):
const CODE_PATTERN = /^[A-Z]{3}-\d{4}$/;
function validateLinesGood(lines) {
return lines.filter(line => CODE_PATTERN.test(line));
}5. Canlı Test ve Sınır Durumları (Edge Cases)
Yazılım Motoru Regex Test Aracı; bayrakları (g, i, m, s, u), eşleşme gruplarını ve yakalanan metin parçalarını anlık olarak görselleştirir. Kodunuza entegre etmeden önce boşluklar, Türkçe karakterler, yeni satır karakterleri ve sınır durumlarını bu araç üzerinde doğrulayabilirsiniz.