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ğı