Regex Tester nasıl kullanılır?
- Deseninizi, çevreleyen
/ işaretleri olmadan eğik çizgilerin arasına girin. g (tüm eşleşmeler), i (harf duyarsız) ve m (çok satırlı) gibi bayrakları açıp kapatın.- Test metninizi yapıştırın. Eşleşmeler sağda vurgulanır ve aşağıda konumları ve yakalama gruplarıyla listelenir.
- Değiştir'i işaretleyin ve
$1 veya $<name> gibi bir değiştirme ifadesi girerek String.replace sonucunu önizleyin. - Test edilmiş bir e-posta, URL, IP veya tarih regex'iyle başlamak için Desen kütüphanesi'nden bir desen seçin.
JavaScript düzenli ifadeleri
Bu test aracı tarayıcınızın kendi RegExp motorunu kullanır; bu yüzden sonuçlar, JavaScript ve Node.js'te String.match, matchAll, replace ve RegExp.exec'in döndürdüğüyle birebir aynıdır. Buna modern sözdizimi de dahildir: adlandırılmış gruplar (?<name>…), geri bakış (?<=…), u bayrağıyla \p{L} gibi Unicode özellik kaçışları ve d bayrağıyla eşleşme konumları.
Bayraklar ne işe yarar?
| Bayrak | Ad | Etkisi |
g | global | İlk eşleşmede durmak yerine tüm eşleşmeleri bulur. |
i | ignoreCase | Harfler büyük/küçük harf ayrımı olmadan eşleşir. |
m | multiline | ^ ve $ her satırın başında ve sonunda eşleşir. |
s | dotAll | . satır sonlarıyla da eşleşir. |
u | unicode | Deseni kod noktaları olarak ele alır; \p{…} ve \u{…}'yu etkinleştirir. |
y | sticky | Yalnızca geçerli lastIndex konumunda eşleşir. |
d | hasIndices | Her yakalama grubu için başlangıç ve bitiş konumlarını raporlar. |
Felaket boyutunda geri izlemeye (catastrophic backtracking) karşı koruma
(a+)+$ veya (\w|\d)*x gibi iç içe niceleyiciler içeren desenler, neredeyse eşleşen girdilerde üstel sürede çalışabilir. Normal bir web sayfasında bu, sekmeyi dondurur. Burada her eşleştirme bir saniye sonra durdurulan arka plandaki bir Web Worker'da çalışır ve donmuş bir tarayıcı yerine açık bir uyarı alırsınız. Aynı desen production kodunda bir ReDoS açığı olabilir; bu yüzden uyarıyı düzeltilmesi gereken bir hata olarak değerlendirin.
Daha iyi regex yazmak için ipuçları
- Değerlerin tamamını doğrularken desenleri
^ ve $ ile sabitleyin; aksi hâlde dizenin herhangi bir yerindeki eşleşme de geçer.
.* yerine [^"]* gibi belirli sınıfları tercih edin; daha hızlıdırlar ve fazla eşleşmeyi önlerler.
- Yakalanan değere ihtiyacınız yoksa yakalamayan grupları
(?:…) kullanın.
- Gruplarınıza ad verin.
match.groups.year, match[1]'den daha kolay okunur.
Sıkça sorulan sorular
Bu test aracı hangi regex türünü kullanıyor?
Tarayıcınızın yerleşik RegExp'i aracılığıyla JavaScript (ECMAScript). Sözdiziminin çoğu PCRE, Python ve Java ile ortaktır, ancak sahiplenici (possessive) niceleyiciler, atomik gruplar ve (?i) gibi satır içi değiştiriciler JavaScript'te yoktur.
Desenim neden yalnızca bir eşleşme buluyor?
g (global) bayrağı olmadan JavaScript ilk eşleşmeden sonra durur. Tüm geçişleri bulmak için g'yi etkinleştirin.
Değiştirme ifadesinde gruplara nasıl başvururum?
Numaralı gruplar için $1, $2…, adlandırılmış gruplar için $<name>, tüm eşleşme için $& ve düz bir dolar işareti için $$ kullanın.
Test aracı neden zaman aşımıyla durdu?
Desen girdinizde bir saniyeden uzun sürdü; bu da neredeyse her zaman felaket boyutunda geri izleme anlamına gelir. (x+)+ gibi iç içe niceleyicileri veya (a|a)* gibi örtüşen alternatifleri arayın ve her karakter yalnızca tek bir şekilde eşleşebilecek biçimde yeniden yazın.
Test verilerim bir yere gönderiliyor mu?
Hayır. Eşleştirme tarayıcınızdaki bir Web Worker'da yerel olarak çalışır. Deseniniz ve metniniz, geri döndüğünüzde hâlâ orada olsun diye yalnızca kendi tarayıcınızda saklanır.