Regex test aracı
Bir düzenli ifadeyi canlı test edin: eşleşmeleri ve yakalama gruplarını görün, değiştirmeleri önizleyin ve metni bölün — JavaScript semantiğiyle.
Sonuçları görmek için bir desen ve biraz metin girin
Bu araç ne yapar
Bir düzenli ifade, metin desenlerini tanımlayan kompakt bir dildir ve bir tane yazmanın tek güvenilir yolu, onun gerçek metne karşı çalışmasını izlemektir. Bu test aracı bunu üç modda canlı yapar. Eşleştir, desenin eşleştiği her yeri metninizde vurgulanmış olarak gösterir ve her yakalama grubunu altında listeler. Değiştir, String.replace'in ne üreteceğini, $1 ve lt;name> referansları dahil önizler. Böl, String.split'in metni nasıl parçalara ayıracağını gösterir — çıktıda görünen yakalanan ayırıcılar gibi, insanların doğru öngöremediği parçalar dahil.
Desen, bir taklidi değil, tarayıcınızın kendi JavaScript motorunda çalışır. Burada eşleşen her şey, bayt bayt, JavaScript kodunuzda da tam olarak eşleşecek olandır, çünkü işi yapan aynı motordur.
Eşleşme sonuçlarını okuma
Her eşleşme test metninde vurgulanır ve altında konumuyla — başladığı ve bittiği karakter kaymalarıyla — listelenir. Desen yakalama grupları içeriyorsa, her grup, yakaladığı değerle birlikte eşleşmesinin altında görünür. Gruplar, açılan parantezlerine göre soldan sağa numaralanır; motorun $1, $2 ve geri referanslar için numaraladığı gibi tam olarak; adlı bir grup adını numarasının yanında gösterir. Eşleşmede yer almayan bir grup — diyelim ki bir seçmenin kaybeden tarafı — boş bir dize olarak gösterilmek yerine öyle işaretlenir, çünkü kodunuza göre bunlar farklı şeylerdir: undefined ile «».
Bir desen meşru biçimde sıfır karakter eşleştirebilir — ^, \b ya da boş bir seçenek hepsi eşleştirebilir. Bu sıfır uzunluklu eşleşmeler hiçbir şey vurgulamaz; bu yüzden araç, eşleşmenin nereye gittiğini merak etmenizi önlemek için konumu ince bir çizgiyle işaretler.
Bayraklar
Bayraklar tüm desenin nasıl davrandığını değiştirir ve ikisi çoğu regex kafa karışıklığının nedenidir:
- g (global) — yalnızca ilkini değil, her eşleşmeyi bul. Onsuz, eşleştir tek bir sonuç gösterir ve değiştir tek bir geçişi değiştirir. İnsanların en sık unuttuğu bayrak budur.
- i (büyük/küçük harf yok say) — harfler büyük/küçük harften bağımsız eşleşir.
- m (çok satırlı) — ^ ve $, yalnızca tüm metnin değil, her satırın başında ve sonunda eşleşir.
- s (dotAll) — nokta, satır sonu karakterleriyle de eşleşir. Onsuz, . her satır sonunda durur.
- u (Unicode) — desen kod noktalarında çalışır; böylece emoji ve temel aralığın dışındaki diğer karakterler doğru davranır ve \p{…} özellik kaçışları kullanılabilir olur.
- y (yapışkan) — eşleşme, bir öncekinin bittiği yerde tam olarak başlamalıdır. Belirteç çözümleyiciler (tokenizer) için yararlıdır; başka her yerde şaşırtıcıdır.
- d (indeksler) — motor her grubun tam konumlarını kaydeder. Neyin eşleştiği konusunda hiçbir şeyi değiştirmez.
Değiştirme referansları
Değiştirme metni harfi harfine alınmaz — her eşleşme için bir avuç $ dizisi genişletilir. $1'den $9'a numaralı grupların yakaladığını, lt;name> adlı bir grubu, amp; tüm eşleşmeyi ekler ve $ değişmez bir dolar işareti üretir. Diğer her şey olduğu gibi kopyalanır.
"2026-07-20".replace(/(?<y>\d{4})-(\d{2})-(\d{2})/, "$3.$2.lt;y>")
// → "20.07.2026"İçselleştirmeye değer bir JavaScript davranışı: g bayrağı olmadan, değiştir yalnızca ilk geçişi değiştirir. Bu, bu aracın bir tuhaflığı değil — kodunuzun yapacağı şeydir. g kapalıyken araç bir ipucu gösterir; böylece tek değiştirme bir hata gibi okunmaz.
Böl gerçekte nasıl davranır
Bir regex ile String.split'in, deneyimli geliştiricileri bile düzenli olarak şaşırtan iki davranışı vardır ve böl modu büyük ölçüde onları görünür kılmak için vardır. Birincisi, desen yakalama grupları içeriyorsa, yakaladıkları şey parçalar arasında çıktı dizisine dokunur — «a,b»'yi (,) ile bölmek üç parça üretir: a, virgül, b. İkincisi, metnin en başındaki ya da sonundaki eşleşmeler ya da yan yana iki eşleşme çıktıda boş dizeler üretir; araç bunları gizlemek yerine açıkça gösterir.
"a,b".split(/(,)/) // → ["a", ",", "b"] ",a,".split(/,/) // → ["", "a", ""]
Kaçak desenler katlanılmaz, durdurulur
Bazı desenler tuzaktır. Neredeyse eşleşen uzun bir dizeye karşı denenen (a+)+ gibi iç içe bir niceleyici, pes etmeden önce motoru üstel olarak çok sayıda kombinasyonu yeniden denemeye zorlar — buna felaket geri izleme (catastrophic backtracking) denir ve bir tarayıcı sekmesini dakikalarca dondurabilir. Bu araç deseninizi ayrı bir çalışan (worker) iş parçacığında çalıştırır ve iki saniye sonra durdurur; böylece kaçak bir desen size donmuş bir sayfa yerine bir mesaja mal olur. Bu mesajla karşılaşırsanız, desende iç içe niceleyicileri ya da örtüşen seçenekleri arayın; çözüm genellikle iç yinelemeyi ve dış olanı aynı metni eşleştiremez hâle getirmektir.
Bu sitedeki her araçta olduğu gibi, desen ve metin cihazınızdan asla çıkmaz — çalışan, bir sunucunun değil, sayfanın parçasıdır.
Sıkça sorulan sorular
- Bu test aracı hangi regex türünü kullanır?
- JavaScript (ECMAScript), çünkü desen tarayıcının kendi motorunda çalışır. Adlı gruplar, geriye bakış ve \p{…} Unicode özellik kaçışları modern JavaScript'teki gibi çalışır. PCRE ya da Python'dan desenler çoğunlukla aktarılır, ama JavaScript'te bulunmayan yapılar — sahiplenici niceleyiciler, atomik gruplar, \A ve \z — reddedilir ya da başka bir şey ifade eder.
- Desenim neden yalnızca bir eşleşme buluyor?
- Neredeyse her zaman: g bayrağı kapalıdır. Onsuz, JavaScript ilk eşleşmede durur ve değiştir yalnızca ilk geçişi değiştirir. Tüm metni aramak için g onay kutusunu açın.
- Bir grup için «yer almadı» ne anlama gelir?
- Grup desende vardır, ama bu belirli eşleşmede kullanılmadı — genellikle kaybeden bir seçmenin dalında ya da sıfır kez eşleşen bir niceleyicinin altında olduğu için. Kodda değeri undefined'dır; bu, boş bir dize yakalamaktan farklıdır; bu yüzden araç ikisini ayrı tutar.
- Desenim ya da metnim bir sunucuya gönderiliyor mu?
- Hayır. Eşleştirme tümüyle tarayıcınızda, aynı sayfadaki bir çalışan iş parçacığının içinde çalışır. İki saniyelik güvenlik zaman aşımı da yerel olarak uygulanır — yazdığınız hiçbir şey cihazınızdan çıkmaz.