RegExp (Düzenli İfadeler)
RegExp (Düzenli İfadeler): Regex Pattern Tarama — Metin İçinde Kalıp Arama Regular Expression (Regex), metin içinde belirli kalıpları (pattern) aramak için kullanılan küçük ama g
Regex Pattern Tarama — Metin İçinde Kalıp Arama
Regular Expression (Regex), metin içinde belirli kalıpları (pattern) aramak için kullanılan küçük ama güçlü bir dildir. Tıpkı Google'da arama yaparken joker karakter (*) kullanmak gibi ama çok daha güçlü. Test otomasyonunda e-posta formatını doğrularız, hata mesajlarından bilgi çıkarırız, URL kalıplarını kontrol ederiz. Java'da `Pattern.compile()` ve `Matcher` kullanırdık; JS'de ise `/pattern/flags` sözdizimi çok daha basittir. Peki bu kadar güçlü bir araç varken, neden deneyimli mühendisler regex'i kullanmadan önce iki kez düşünür? Çünkü regex'in gücü ile okunabilirliği ters orantılıdır: bugün 20 karakterde yazdığın e-posta doğrulaması, üç ay sonra sen dahil kimsenin okuyamadığı bir duvara dönüşür — ve regex yanlış yazıldığında hata VERMEZ, sadece yanlış eşleşir. Testte bunun anlamı şudur: `expect(text).toMatch(/hata/)` yazan bir assertion, sayfada 'hata' kelimesi geçen HERHANGİ bir metinde geçer; 'hata bulunamadı' cümlesinde bile. Java'da `Pattern.compile()`'ı bir kez derleyip sabit olarak tutma alışkanlığı burada da geçerlidir (JS'de her döngüde yeni regex literal'i oluşturmak performans kaybıdır). QA kuralı: regex'i doğrulama için değil, çıkarım (extraction) için tercih et — 'bu metin doğru mu' sorusunu net karşılaştırmayla, 'bu metnin içinden sipariş numarasını al' sorusunu regex ile çöz.
JS Regex Metodları — QA Örnekleri
// ─── 1. test() — Boolean kontrol ───────────────────────────── // Java: Pattern.compile(re).matcher(str).matches() const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/; console.log(emailRegex.test('user@example.com')); // true console.log(emailRegex.test('invalid-email')); // false // ─── 2. match() — Eşleşmeleri dizi olarak döner ─────────────── // Java: Matcher.group() const text = 'Hata kodu: 404, yönlendirme: 301'; const codes = text.match(/\d+/g); // 'g' flag: global, tümünü bul console.log('Bulunan kodlar:', codes); // ['404', '301'] // ─── 3. replace() — Regex ile değiştirme ───────────────────── // Java: str.replaceAll(regex, replacement) const dirty = ' Merhaba Dünya '; const clean = dirty.replace(/\s+/g, ' ').trim(); console.log('Temiz:', clean); // 'Merhaba Dünya' // ─── 4. QA — URL format doğrulama ──────────────────────────── const urlRegex = /^https?:\/\/[\w-]+(\.[\w-]+)+/; console.log(urlRegex.test('https://learnqa.dev')); // true console.log(urlRegex.test('ftp://invalid')); // false
Micro Lab: JavaScript QA kod yazma
TODO satirini beklenen cozumdeki kritik satirla degistir. Bu gercek runtime degil; amac dogru yapinin yazilmasini kontrollu olarak pekistirmek.
Adim Adim: JavaScript QA kod yazma
Amaci ve asenkron bagimliliklari oku
await / Promise zincirini dogru yere yerlestir
assertion veya beklenti satirini tamamla
Kodu calistirip console veya test ciktisini oku
Flaky olursa bekleme stratejisi veya retry ekle
JavaScript QA kodunu guvenli yazma ve test etme sirasi nedir?
🎬 Aynı Regex'i İkinci Kez Kullanınca Neden Sonuç Değişir? — lastIndex Tuzağı