İçeriğe geç

Regex Test Aracı rehberi

Araç rehberi. Güncellendi .

XGM Regex Test Aracı ile JavaScript düzenli ifadeleri nasıl test edilir: bayraklar, gruplar, değiştirme sözdizimi, yavaş desenler ve yaygın hatalar.

Düzenli ifadelerin temelleri

Bir düzenli ifade, bir dizi metni derli toplu bir sözdizimiyle tarif eder: düz karakterler, karakter sınıfları, niceleyiciler ve gruplar. Motor girdiyi tarar ve desenin nerelerde eşleştiğini bildirir. XGM'nin test aracı tarayıcınızın JavaScript motorunu kullanır; bu yüzden sonuçlar, kodunuzdaki String.prototype.match, matchAll ve replace çağrılarının yaptığıyla birebir örtüşür. Aynı deseni tarayıcı konsolunda denemekle bu sayfada denemek arasında bir fark yoktur, ama araç eşleşmeleri ve grupları okunur biçimde gösterir. Eşleşmeleri gözle görmek, bir deseni kafada canlandırmaya çalışmaktan hem daha hızlı hem daha güvenilirdir.

En çok kullanacağınız sözdizimi
SözdizimiAnlamıÖrnek
.Satır sonları dışında herhangi bir karakter (s yoksa)a.c ifadesi abc ile eşleşir
\d, \w, \sRakam, sözcük karakteri, boşluk\d{4} ifadesi 2026 ile eşleşir
[abc], [^abc]Karakterlerden biri ya da hiçbiri[aeiou]
*, +, ?0 veya daha fazla, 1 veya daha fazla, 0 veya 1colou?r
{n,m}n ile m arasında tekrar\d{2,4}
^, $Girdinin başı ve sonu (m ile satırın başı ve sonu)^Error
\bSözcük sınırı\bcat\b
( ), (?<name> )Yakalama grubu, adlandırılmış grup(?<year>\d{4})
(?: )Yakalamayan grup(?:https?|ftp)://
a|bSeçeneklerjpg|png
(?= ), (?! )İleri bakış, olumsuz ileri bakış\d+(?=px)
Regex Test Aracı bir deseni nasıl değerlendirirDesen ve bayraklar bir web işçisinde derlenir, süre sınırıyla test metni üzerinde çalıştırılır ve eşleşmeler, gruplar ile isteğe bağlı değiştirme sonucu sayfaya geri gönderilir.Desen ve bayraklarÇevresindeki eğik çizgiler olmadan JavaScriptsözdizimiWeb işçisinde derlemeSözdizimi hataları motorun kendi iletisiylebildirilirTest metni üzerinde çalıştırmaÇok uzun sürerse 1,5 saniye sonra durdurulurEşleşmeler ve gruplarVurgulanmış metin, eşleşme başına numaralı veadlandırılmış yakalamalarİsteğe bağlı değiştirme$1, $<name> ve $& kullanan değiştirme
Desen ve bayraklar bir web işçisinde derlenir, süre sınırıyla test metni üzerinde çalıştırılır ve eşleşmeler, gruplar ile isteğe bağlı değiştirme sonucu sayfaya geri gönderilir.

Regex Test Aracı nasıl kullanılır

  1. Regex Test Aracını açın ve deseni çevresindeki eğik çizgiler olmadan girin, örneğin (?<year>\d{4})-(?<month>\d{2}).
  2. g, i ya da m gibi bayrakları ayarlayın.
  3. Test metnini yapıştırın. Eşleşmeler vurgulanır ve grupları ile birlikte listelenir.
  4. Sonucu önizlemek için Değiştir seçeneğini açın ve $1, $<name> ya da $& kullanarak bir değiştirme metni girin.

Pratik bir örnek: bir günlük dosyasında example.com altındaki sunucu adlarını bulmak için \b[a-z0-9-]+\.example\.com\b deseni gi bayraklarıyla www.example.com ve API.example.com ile eşleşir, ama example.com.evil.example.net ile eşleşmez; bunu sağlayan, com sonrasındaki sözcük sınırıdır. Hangi satırların neden eşleştiğini görmek için varyasyonları test aracında deneyin. Sözcük sınırını kaldırıp sonucun nasıl değiştiğine bakmak, kuralın ne işe yaradığını anlatmanın en hızlı yoludur.

Desenle birlikte bir test satırları kümesi saklayın; örneğin kodun yanındaki bir yorum satırında. Biri deseni ileride değiştirdiğinde, o satırları test aracına yapıştırmak davranışın değişip değişmediğini anında gösterir. Bu küçük alışkanlık, düzenli ifadelerin bakımını tahmin işi olmaktan çıkarır. Satır sayısı az olsa bile her birinin neden orada olduğunu kısa bir notla yazmak, ileride ciddi zaman kazandırır.

Eşleşmemesi gereken durumlar da dahil olmak üzere gerçekçi metinlerle test edin. Geçerli her tarihi bulan bir desen, 2026-13-45 gibi bir değeri ya da benzer görünen bir telefon numarasını da reddettiğini doğrulayana kadar yarım kalmış sayılır. Yanlış pozitifler çoğu zaman eksik eşleşmelerden daha pahalıya mal olur, çünkü sessizce yanlış veri üretirler. Eşleşmesi gereken ama alışılmadık görünen örnekleri de aynı listeye ekleyin.

Bayraklar

JavaScript regex bayrakları
BayrakAdıEtkisi
gGlobalİlk eşleşme yerine tüm eşleşmeleri bulur
iIgnore caseBüyük/küçük harf farkını yok sayar
mMultiline^ ve $ satır başlarında ve sonlarında eşleşir
sdotAll. satır sonlarıyla da eşleşir
uUnicodeUnicode kod noktaları ve \p{…} özellik kaçışları
vUnicode setsu gibi, ek olarak sınıflarda küme işlemleri; u ile birlikte kullanılmaz
yStickyYalnızca geçerli konumda eşleşir (lastIndex)
dIndicesGrupların başlangıç ve bitiş indislerini bildirir

u bayrağı ASCII dışındaki her şey için önemlidir. Bu bayrak olmadan bir emoji iki ayrı kod birimi sayılır ve "herhangi bir harf" anlamına gelen \p{L} kullanılamaz. u ile birlikte \p{L}+ her yazı sistemindeki sözcüklerle, örneğin Ștefan ya da Zürich ile eşleşir. Türkçe metinlerde de fark burada ortaya çıkar: noktasız ı ve şapkalı harfler \w kapsamına girmez, ama \p{L} kapsamına girer. Bayrakları sonradan eklemek desenin anlamını değiştirebileceği için, testi baştan doğru bayraklarla yapın.

Değiştirme sözdizimi

Değiştirme metnindeki özel kalıplar
KalıpEklediği
$&Eşleşmenin tamamı
$1, $2, …Numaralı grup
$<name>Adlandırılmış grup
$$Düz bir dolar işareti
$'Eşleşmeden sonraki metin (dolar işaretinin ardından ters tırnak ise öncesindeki metni ekler)
Tarihleri yeniden biçimlendirmek
Pattern:     (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
Flags:       g
Replacement: $<day>.$<month>.$<year>

Input:  Released 2026-09-15, patched 2026-10-01
Output: Released 15.09.2026, patched 01.10.2026

Yavaş desenler ve felaket geri izleme

JavaScript'in regex motoru geri izlemeye dayanır: desenin bir parçası başarısız olduğunda geri döner ve eşleşmenin başka yollarını dener. Çakışan karakterler üzerinde iç içe geçmiş niceleyiciler, örneğin (a+)+$ ya da (\w|\d)*x, deneme sayısının girdi uzunluğuyla üstel biçimde büyümesine yol açabilir. Birkaç düzine karakter o noktada saniyeler, hatta daha uzun sürebilir. Sorunun sinsi yanı, kısa test verileriyle her şeyin hızlı görünmesidir.

Bu, ReDoS (düzenli ifadelerle hizmet reddi) adı verilen gerçek bir güvenlik sorunudur: böyle bir deseni kullanıcı girdisi üzerinde çalıştıran bir sunucu, özel olarak hazırlanmış tek bir istekle kilitlenebilir. Test aracı desenleri bir web işçisinde çalıştırır ve 1,5 saniye sonra durdurur; böylece donmuş bir sekme yerine "1,5 saniye sonra durduruldu" iletisini görürsünüz. Bir desen bu sınıra takılıyorsa, aynı desen sunucunuzda da bir risktir. Böyle bir deseni olduğu gibi bırakmak yerine daha dar bir karakter sınıfıyla yeniden yazın.

Riskli desenleri yeniden yazmak
RiskliDaha güvenliNeden
(a+)+a+Aynı karakterler üzerinde iç içe geçmiş niceleyiciler
(\w|\d)*\w*\d zaten \w içinde olduğundan seçenekler çakışıyor
.*.*=[^=]*=İki açgözlü joker aynı metin için yarışıyor
^(\s*\w+\s*)+$^\s*\w+(?:\s+\w+)*\s*$Tekrarlar arasındaki ayırıcıları zorunlu kılın

Sunucularda girdiyi sınırlayın

Düzenli ifadeleri uygulamadan önce kullanıcı girdisinin uzunluğunu doğrulayın ve basit, sabitlenmiş desenleri tercih edin. E-posta adresleri ya da URL'ler gibi karmaşık biçimler için dev bir desen yerine bir ayrıştırıcı kullanın.

Yaygın hatalar

  • Kaçış koymayı unutmak. . herhangi bir karakterle eşleşir; düz bir nokta için, örneğin example\.com ifadesinde \. kullanın.
  • Sabitlenmemiş doğrulama. \d{5} deseni 123456 içinde de eşleşir; bir değerin tamamını doğrulamak için ^\d{5}$ kullanın.
  • Açgözlü jokerler. <.*> deseni satırdaki ilk < işaretinden son > işaretine kadar eşleşir; <[^>]*> ya da tembel <.*?> kullanın.
  • Kodda iki kez kaçış. JavaScript'te dize olarak yazılan bir desen çift ters eğik çizgi ister ("\\d"); test aracı ise regex sabitindeki biçimi bekler (\d).
  • Döngüde `test()` ile `g` kullanmak. Global bayrak lastIndex değerini çağrılar arasında korur; bu yüzden aynı regex üzerinde art arda yapılan test çağrıları sırayla doğru ve yanlış döndürür.

URL'ler için URL ve UTM aracı bir adresi parçalarına bir desenden çok daha güvenilir biçimde ayırır. Veri biçimleri için JSON Araçları yapıyı gerçekten doğrular. Genel kural şudur: bir biçimin resmi bir dilbilgisi varsa, onu ayrıştırıcıyla okuyun ve düzenli ifadeyi yalnızca metin içinde arama yapmak için saklayın. Bir deseni üretime almadan önce tek satırlık bir yorumla açıklayın; altı ay sonra o yorum, deseni yeniden çözmekten çok daha hızlı okunur.

SSS

Araç hangi regex lehçesini kullanıyor?

JavaScript'i, tarayıcınızın gerçekleştirdiği biçimiyle kullanır. Sonuçlar, aynı desenin o tarayıcıdaki JavaScript kodunda verdiği sonuçla örtüşür.

Python ya da PCRE'den gelen desenim neden çalışmıyor?

Lehçeler birbirinden farklıdır. JavaScript'te sahiplenici niceleyiciler ve atomik gruplar yoktur, (?i) gibi satır içi değiştiriciler çoğu tarayıcıda desteklenmez ve bazı kaçış dizileri farklı davranır.

Testim neden 1,5 saniye sonra durduruldu?

Desen girdi üzerinde fazla geri izleme yaptı; bu da felaket geri izlemenin işaretidir. İç içe geçmiş ya da birbiriyle çakışan niceleyicileri sadeleştirin.

Satırlar arasında nasıl eşleşme yaparım?

. karakterinin satır sonlarıyla eşleşmesi için s bayrağını ya da [\s\S] kalıbını kullanın. ^ ve $ her satırda eşleşsin istiyorsanız m bayrağını ekleyin.

$1 ile $<name> arasındaki fark nedir?

$1 bir gruba konumuna göre atıfta bulunur; $<name> ise adlandırılmış bir gruba atıfta bulunur ve desene yeni gruplar eklediğinizde çalışmayı sürdürür.

Test metnim yükleniyor mu?

Hayır. Desen ve metin tarayıcınızda, sayfanın bir işçi iş parçacığında işlenir.

Regex e-posta adreslerini doğrulayabilir mi?

Yalnızca yaklaşık olarak. Adres sözdiziminin tamamı karmaşıktır; pratikte işe yarayan yol, basit bir desenle birlikte bir doğrulama e-postası göndermektir.

d bayrağı ne yapar?

Eşleşme sonuçlarına her yakalama grubunun başlangıç ve bitiş indislerini ekler; bu da vurgulama yapmak ya da düzenleyici yazmak için kullanışlıdır.

HTML ayrıştırmak için regex kullanmalı mıyım?

Basit ve içeriği bilinen parçaların ötesinde hayır. HTML'in iç içe geçmesi ve isteğe bağlı sözdizimi desenleri kırılgan yapar; tarayıcının DOM ayrıştırıcısını ya da düzgün bir HTML ayrıştırma kitaplığını kullanın.

\w neden aksanlı harflerle eşleşmiyor?

\w ASCII harfleri, rakamlar ve alt çizgi demektir. Her yazı sistemindeki harfler için u bayrağıyla birlikte \p{L} kullanın.

Kaynaklar