İçeriğe geç

Regex Test Aracı

JavaScript düzenli ifadelerini vurgulanmış eşleşmeler, yakalama grupları, sade dille açıklama, hazır kod ve felaket geri izleme kontrolü ile test edin.

Tarayıcınızda çalışır. Hiçbir şey yüklenmez.

Çevreleyen eğik çizgiler olmadan JavaScript sözdizimi.
g i m s u y d v
Hızlı başvuru
JavaScript regex sözdizimi
Karakter
.Satır sonu dışındaki her karakter; s bayrağıyla satır sonları da
\d \D0-9 arası bir rakam; \D rakam olmayan her şeydir
\w \WBir harf, rakam veya alt çizgi; \W bunların dışındaki her şeydir
\s \SBir boşluk, sekme veya satır sonu; \S boşluk karakteri olmayan her şeydir
[abc]Listelenen karakterlerden herhangi biri
[^abc]Listelenmeyen herhangi bir karakter
[a-z]Aralıktaki herhangi bir karakter
\. \+Ters eğik çizgi, özel bir karakteri düz karakter hâline getirir
Kaç tane
*Sıfır veya daha fazla
+Bir veya daha fazla
?Sıfır veya bir: öncesindeki kısım isteğe bağlıdır
{2} {2,} {2,5}Tam olarak 2, en az 2, 2 ile 5 arasında
+? *?Bir niceleyiciden sonra gelen ? onu tembel yapar: mümkün olduğunca az karakter
Gruplar ve seçimler
(…)Yakalama grubu, $1, $2 … olarak geri okunur
(?:…)Yakalamadan gruplama
(?<name>…)Adlandırılmış grup, $<name> olarak geri okunur
a|bÇubuğun iki yanından biri
\1İlk grubun eşleştirdiği şey, bir kez daha
(?=…) (?!…)Ardından gelen / ardından gelmeyen, onu tüketmeden
(?<=…) (?<!…)Öncesinde gelen / öncesinde gelmeyen, onu tüketmeden
Konumlar
^Metnin başı; m bayrağıyla birlikte bir satırın başı
$Metnin sonu; m bayrağıyla birlikte bir satırın sonu
\b \BBir kelime sınırı; \B kelime sınırı olmayan her yerdir
Bayraklar
gYalnızca ilkini değil, her eşleşmeyi bul
iBüyük ve küçük harfi yok say
m^ ve $ her satır sonunda da eşleşir
sNokta satır sonlarıyla da eşleşir
u vUnicode modu, \p{…} için gereklidir; v genişletilmiş biçimdir
ySticky: yalnızca son eşleşmenin bittiği yerde eşleşir
dHer grubun başlangıcını ve bitişini bildirir; eşleşme tablosunda gösterilir

Bu araç hakkında

Regex Test Aracı, siz yazdıkça bir JavaScript düzenli ifadesini örnek metninize karşı çalıştırır: eşleşmeler yerinde vurgulanır ve bir tablo her eşleşmeyi dizini ve adlandırılmış olanlar dahil yakalama gruplarıyla listeler. Değiştirme metnindeki $1, $<name> veya $& ile String.replace sonucunu görmek için Değiştir seçeneğini açın. Açıklama, deseni size parça parça geri okur - “0-9 arası bir rakam, tam olarak 4 kez”, “year adlı bir yakalama grubu”, “bir kelime sınırı” - ve tanımadığı her yapı için bunu tahminden tarif etmek yerine açıkça söyler. Bu deseni kodda kullan, aynı deseni ve bayrakları bir JavaScript, Python, PHP veya Go parçacığına dönüştürür; her dilin bayrak yazımını verir ve o dilde karşılığı olmayan her bayrak için bir not düşer. Geri izleme kontrolü, felaket geri izlemeye yol açan biçimler için aynı ayrıştırmayı okur - ortak karakterler üzerinde bir niceleyicinin içine yerleşmiş bir niceleyici, bir niceleyici altında aynı metinle eşleşebilen alternatifler ve ardından aynı karakterlerle eşleşebilecek bir şey gelen üst sınırsız tekrar - ve alt dizgiyi, neden geri izlediğini ve bir yeniden yazım biçimini adlandırır; deseni, yavaş olması için hazırlanmış bir girdiye karşı asla çalıştırmaz, bu yüzden size bir biçim bulduğunu söyleyebilir ama hiç olmadığını asla söyleyemez. Bu, JavaScript motorudur; dolayısıyla özyineleme, atomik gruplar veya sahiplenici niceleyiciler gibi yalnızca PCRE'ye özgü sözdizimi kullanılamaz ve araç, sizin için veri biçimlerini doğrulamak yerine desenleri test eder.

Desen, bayraklar, test metni ve değiştirme metni tarayıcınızdan asla çıkmaz: bunlar bir Web Worker içinde değerlendirilir, XGM API'sine gönderilmez ve URL'ye yazılmaz, böylece paylaştığınız bir bağlantı yalnızca aracı taşır, yazdıklarınızı değil. Worker 1,5 saniye sonra sonlandırılır; felaket geri izlemeye sahip bir desenin sayfayı dondurmak yerine çalışmayı durdurmasının nedeni budur. Açıklama, kod parçacıkları ve geri izleme kontrolü de sayfadaki desen metninden üretilir: üçü de deseni çalıştırmak yerine ayrıştırır ve her biri, tanımadığı bir şey için tahmine dayalı bir tarif vermek yerine bunu açıkça söyler. Özellikle geri izleme kontrolü, deseni yavaş olsun diye hazırlanmış bir girdiyle asla denemez - geri izlemeye yol açan kalıpları arar - bu yüzden size yalnızca böyle bir kalıp bulduğunu söyleyebilir, hiç olmadığını asla.

Nasıl kullanılır

  1. Regex Test Aracı aracını açın.
  2. İncelemek istediğiniz girdiyi yapıştırın veya yazın.
  3. Tarayıcınızda hesaplanan sonucu okuyun; girdi XGM'e gönderilmez.
  4. Çıktıyı yalnızca doğru göründüğünü kontrol ettikten sonra kopyalayın.
  5. Daha geniş bir teşhis görünümü gerekiyorsa ilgili XGM araçlarını kullanın.

SSS

Hangi bayrakları kullanabilirim?

g, i, m, s, u, y, d ve v - tarayıcının kendi RegExp bayrakları. g olmadan yalnızca ilk eşleşme döndürülür; s, noktanın satır sonlarıyla eşleşmesini sağlar; d ise her yakalama grubunun başlangıç ve bitiş dizinini ekler.

Test aracı neden 1.5 saniye sonra durdu ve desenimi ReDoS açısından denetliyor mu?

Desen felaket geri izlemeye takıldı; bu genellikle neredeyse eşleşen bir metne karşı (a+)+ veya (\w+\s?)* gibi iç içe niceleyicilerden kaynaklanır. Desen, 1.5 saniyede sonlandırılan bir Web Worker içinde çalışır, böylece sayfa yanıt vermeyi sürdürür - aynı deseni kullanıcı girdisi üzerinde çalıştıran bir sunucuda böyle bir koruma yoktur. Geri izleme denetimi, deseni yavaşlatmak için hazırlanmış bir girdiye karşı çalıştırmadan yalnızca biçimini okur ve üç yapıyı tam alt dizesiyle bildirir: ortak karakterler üzerinde bir niceleyicinin içine yerleşmiş başka bir niceleyici, aynı metni eşleyebilen seçeneklere sahip nicelenmiş bir grup ve ardından aynı karakterleri eşleyebilen bir şey gelen sınırsız bir tekrar. Her biri neden geri izlediğini ve nasıl yeniden yazılacağını söyler. Ayrıştıramadığı bir yapı güvenli değil, “çözümlenmedi” olarak bildirilir ve temiz bir sonuç bir kanıt değildir.

Desenim veya test metnim tarayıcıdan çıkıyor mu?

Hayır. Her şey tarayıcınızdaki bir Web Worker içinde çalışır, XGM sunucusuna hiçbir şey gönderilmez ve URL yalnızca aracı tutar; deseninizi veya metninizi asla tutmaz.

Neden yalnızca ilk 200 eşleşmeyi görüyorum?

Büyük girdilerde çizimin hızlı kalması için vurgulama 300 eşleşmede, tablo ise 200'de durur. Üstlerindeki sayacın gösterdiği sayı sınıra takıldığında gerçek toplamı bir + ile belirtir ve JSON dışa aktarımı sonucun tamamını içerir.

Desenim neden Python veya PHP'de farklı davranıyor?

Kaçış dizileri ve sınıflar motorlar arasında farklılık gösterir: \d, Python 3'te Unicode duyarlıdır ama u bayrağı olmadan JavaScript'te yalnızca ASCII'dir, lookbehind her yerde kullanılamaz ve adlandırılmış gruplar Python'da (?P<name>), burada ise (?<name>) biçimindedir. Deseni, üretimde çalıştıracak motorla test edin.

Sade dille yazılmış açıklama ne kadar doğru?

Deseni kendisi ayrıştırır - hiçbir zaman çalıştırmaz - ve çapaları, kaçış dizilerini, aralıklarıyla birlikte karakter sınıflarını, grupları (yakalayan, adlandırılmış, yakalamayan ve dört lookaround türünün tamamı), geri referansları, almaşıkları ve tembel olanlar dahil her niceleyiciyi açıklar; m ve s bayrakları da ^, $ ve noktanın anlamına katılmış olarak verilir. Bunların dışında kalan her şey - örneğin (?i:…) gibi satır içi değiştirici grupları ya da v bayrağının köşeli parantez içinde izin verdiği küme işlemleri - yazdığınız haliyle gösterilir ve “Açıklanmadı” olarak etiketlenir, çünkü yanlış bir açıklama hiç açıklama olmamasından kötüdür.

Üretilen kod parçaları olduğu gibi çalışır mı?

Bunlar her dil için, sizin verdiğiniz bir metin değişkeni üzerinde çalışan derle-ve-eşleştir iskeletidir. Bayraklar kopyalanmaz, çevrilir: Python'da re.IGNORECASE, re.MULTILINE ve re.DOTALL, PHP'de sınırlayıcıdan sonra i, m, s ve u, Go'da ise desenin içinde (?ims) olarak yer alır. g'nin JavaScript dışında bir harf karşılığı yoktur, bu yüzden parçacık onun yerine finditer, preg_match_all veya FindAllStringSubmatch kullanır; y, d ve v ise hiçbir yerde karşılığı olmadığından sessizce atılmak yerine bir notta belirtilir. Geçerli olduklarında iki not daha görünür: Python adlandırılmış grubu (?P<name>…) biçiminde yazar ve Go'nun RE2 motoru ileri/geri bakışı ve geri başvuruları doğrudan reddeder.

Tam Regex Test Aracı rehberini okuyun