Regex Test Aracı

Canlı eşleşme vurgulama, yakalama grupları ve değiştirme önizlemesiyle düzenli ifadeler oluşturun ve test edin.

%100 tarayıcınızda çalışır. Yapıştırdığınız hiçbir şey yüklenmez veya saklanmaz.
//

Eşleşmeler

Eşleşme ayrıntıları

#EşleşmeKonumGruplar

Değiştir

Regex test aracı nasıl kullanılır

  1. Deseninizi çevreleyen eğik çizgiler olmadan girin, örneğin \d{3}-\d{4}.
  2. İhtiyacınız olan bayrakları açın (g, i, m, s, u, y).
  3. Test metnini yapıştırın. Eşleşmeler canlı olarak vurgulanır ve her yakalama grubu listelenir.
  4. İsteğe bağlı olarak, sonucu önizlemek için gruplar için $1 veya $<name> kullanarak bir değiştirme dizesi girin.

Test aracı, tarayıcınızın kendi JavaScript regex motorunu kullanır. Desenleriniz ve test verileriniz cihazınızda kalır, yüklenmez veya saklanmaz.

JavaScript regex sözdizimine hızlı bakış

Düzenli ifade türleri diller arasında farklılık gösterir. Bu araç JavaScript (ECMAScript) türünü kullanır; bu yüzden sonuçlar, tarayıcılarda ve Node.js'te RegExp, String.prototype.match ve replace işlevlerinin yaptığıyla örtüşür. Sözdiziminin çoğu Python'a, PCRE'ye ve Java'ya aktarılır, ancak adlandırılmış grup sözdizimi ve geriye bakış (lookbehind) desteği gibi ayrıntılar değişir.

Bayraklar

BayrakAdEtki
gglobalİlkinden sonra durmak yerine tüm eşleşmeleri bulur.
iignoreCaseBüyük/küçük harfe duyarsız eşleştirme.
mmultiline^ ve $, her satırın başında ve sonunda eşleşir.
sdotAll. satır sonlarıyla da eşleşir.
uunicodeDeseni Unicode kod noktaları olarak ele alır; \p{...} özellik kaçışlarını etkinleştirir.
ystickyYalnızca lastIndex ile verilen konumda eşleşir.

Yapı taşları

  • Karakter sınıfları: [abc], aralıklar [a-z], olumsuzlama [^0-9], kısaltmalar \d (rakam), \w (sözcük karakteri), \s (boşluk) ve bunların olumsuzları \D, \W, \S. u bayrağı olmadan \w ve \d yalnızca ASCII'yi kapsar.
  • Niceleyiciler: * (0 veya daha fazla), + (1 veya daha fazla), ? (0 veya 1), {n}, {n,}, {n,m}. Tembel yapmak için sonuna ? ekleyin: .*?.
  • Gruplar: (...) yakalar, (?:...) yakalamadan gruplar, (?<year>\d{4}) adlandırılmış bir grup oluşturur ve \1 veya \k<year> ona geri başvurur.
  • Çapalar: ^, $ ve sözcük sınırı \b.
  • Çevre denetimleri (lookaround): (?=...) olumlu ileriye bakış, (?!...) olumsuz ileriye bakış, (?<=...) olumlu geriye bakış, (?<!...) olumsuz geriye bakış. Karakterleri tüketmeden bağlamı sınarlar.
// Dolar işaretiyle başlayan fiyat tutarları, işaret olmadan
/(?<=\$)\d+(?:\.\d{2})?/g     "Total: $42.50"  →  "42.50"

// Adlandırılmış gruplarla tarihleri yeniden biçimlendirme
"2024-03-15".replace(/(?<y>\d{4})-(?<m>\d{2})-(?<d>\d{2})/, "$<d>.$<m>.$<y>")
// "15.03.2024"

Yaygın desenler

AmaçDesenSınırlamalar
E-posta (basit)^[^\s@]+@[^\s@]+\.[^\s@]+$Yalnızca bir mantık kontrolü. Tam adres sözdizimi çok daha karmaşıktır; bir e-posta göndererek doğrulayın.
IPv4 adresi^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$255'in üzerindeki sekizlileri ve baştaki sıfırları reddeder. IPv6'yı işlemez.
Tarih (YYYY-MM-DD)^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$2023-02-31 gibi imkânsız tarihleri kabul eder. Bir tarih kütüphanesiyle doğrulayın.
URL (http/https)^https?:\/\/[^\s/$.?#][^\s]*$Gevşek bir kontrol. Gerçek ayrıştırma için URL yapıcısını kullanın.

Özellikle IP adresleri için IP adresi dönüştürücü, hem IPv4'ü hem IPv6'yı ayrıştırır ve dönüştürür.

Tuzaklar

Felaket geri izleme (catastrophic backtracking)

İç içe veya çakışan niceleyiciler, JavaScript'inki gibi bir geri izleme motorunun, eşleşme başarısız olduğunda üstel sayıda yol denemesine neden olabilir. Birkaç düzine karakter bir tarayıcı sekmesini dondurabilir veya bir sunucuda hizmet reddi saldırısını (ReDoS) mümkün kılabilir:

/^(a+)+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")   // takılabilir

/^a+$/.test("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!")       // anında

(a+)+, (a|a)* veya (.*)* gibi desenlerden kaçının, alternatifleri birbirini dışlayan tutun ve olabildiğince belirli yazın: tırnak içinde [^"]*, .*'dan daha güvenlidir.

Diğer tuzaklar

  • g bayraklı bir regex lastIndex'i hatırlar; bu yüzden aynı nesne üzerinde test()'i art arda çağırmak true ve false arasında gidip gelir.
  • Bir dizeden desen oluştururken ters eğik çizgiler ikiye katlanmalıdır: new RegExp("\\d+").
  • ^ ve $ unutulursa, bir doğrulayıcı yalnızca bir eşleşme içeren her girdiyi kabul eder.
İpucu: HTML, JSON veya YAML gibi yapılandırılmış biçimleri düzenli ifadelerle ayrıştırmayın. Bir ayrıştırıcı kullanın ya da bunları incelemek için JSON biçimlendiricimizi ve HTML biçimlendiricimizi kullanın.

Sık sorulan sorular

Regex'im neden burada çalışıyor ama Python veya PHP'de çalışmıyor?

Regex türleri farklıdır. Python adlandırılmış grupları (?P<name>...) olarak yazar ve yalnızca sabit genişlikli geriye bakışı destekler; PHP'nin PCRE'si desenleri sınırlayıcılarla sarar. Dize değişmezleri için kaçış kuralları da diller arasında farklıdır.

Açgözlü ve tembel niceleyiciler arasındaki fark nedir?

Açgözlü niceleyiciler (.*) mümkün olduğunca çok eşleşir, sonra geri çekilir; tembel olanlar (.*?) mümkün olduğunca az eşleşir. <b>x</b> üzerinde <.*> dizenin tamamıyla eşleşirken <.*?> yalnızca <b> ile eşleşir.

JavaScript geriye bakışı destekler mi?

Evet, ES2018'den beri; üstelik birçok motorun aksine değişken uzunluklu geriye bakışa izin verir. Tüm güncel büyük tarayıcılar bunu destekler.

Regex'te nokta veya parantez karakterini olduğu gibi nasıl eşleştiririm?

Ters eğik çizgiyle kaçırın: \., \[, \(. Bir karakter sınıfının içinde çoğu karakter düzdür, bu yüzden [.] da bir noktayla eşleşir.

Güncellendi

Panoya kopyalandı