İçeriğe atla
TextArray

Normal ifade hile sayfası

Düzenli ifadeler, sözdiziminin ezberlenmesinden daha kolay aranmasını sağlayacak kadar kompakttır. Bu sayfa, her satır için çalışan bir örnekle birlikte sınıfların, niceleyicilerin, bağlantıların, grupların, genel bakışın, kaçışın ve bayrakların tamamını tek bir ekranda gösterir.

Bu özellik, tarayıcınızda çalışan ve bu sitedeki normal ifade test aracının kullandığı JavaScript'tir. Çoğu Python, Java, Go ve PCRE'de aynıdır; tatların farklılaştığı yerlerde, kenarlarda farklılaşırlar - geriye dönük destek, adlandırılmış grup sözdizimi ve \d'nin "ASCII rakamı" mı yoksa "herhangi bir Unicode rakamı" anlamına mı geldiği.

Sürprizlerin çoğunu iki şey açıklıyor. Niceleyiciler açgözlüdür: ellerinden gelen her şeyi alırlar ve yalnızca modelin geri kalanı başarısız olduğunda geri verirler; bu nedenle <.+> iki etiketi yutar ve <.+?> yutmaz. Ve münavebe en gevşek olanı bağlar, dolayısıyla ^a|b$ "a ile başlar veya b ile biter" anlamına gelir - çoğu insanın bunu yazarken amaçladığı şey değildir.

Karakter sınıfları

Kısayollar, u bayrağını eklemediğiniz ve Unicode özellik çıkışlarını kullanmadığınız sürece yalnızca ASCII'dir.

SözdizimiAnlamÖrnek
.Satır sonu dışında herhangi bir karakterYeni satırlarla da eşleşmesi için s bayrağını ekleyin./a.c/"abc" → "abc"
\dBir rakam, 0–9/\d+/"order 42" → "42"
\DRakam olmayan herhangi bir şey/\D+/"42abc" → "abc"
\wHarf, rakam veya alt çizgiYalnızca ASCII — "é" \w değildir./\w+/"user_1!" → "user_1"
\W\w ile eşleşen hiçbir şey yok/\W+/"a++b" → "++"
\sSekmeler ve yeni satırlar dahil herhangi bir boşluk/\s+/"a \t b" → " \t "
\SBoşluk olmayan herhangi bir karakter/\S+/" hi" → "hi"
[abc]Listelenen karakterlerden herhangi biri/[aeiou]/"rhythm and" → "a"
[^abc]Listelenenler dışında herhangi bir karakter/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Bir dizi karakter/[a-f]+/"zzabcz" → "abc"
\p{L}Herhangi bir Unicode harfi (u bayrağına ihtiyaç duyar)/\p{L}+/"42 café" → "café"

Niceleyiciler

Bunların hepsi varsayılan olarak açgözlüdür: Alabildiği kadarını alırlar ve ancak modelin geri kalanı başarısız olursa geri verirler.

SözdizimiAnlamÖrnek
*Sıfır veya daha fazla/ab*/"a" → "a"
+Bir veya daha fazla/ab+/"abbb" → "abbb"
?Sıfır veya bir — isteğe bağlı hale getirir/colou?r/"color" → "color"
{3}Tam olarak üç/\d{3}/"id 12345" → "123"
{2,}İki veya daha fazla/a{2,}/"aaa" → "aaa"
{2,4}İki ile dört arasında/a{2,4}/"aaaaa" → "aaaa"
*?Tembel – mümkün olduğu kadar az şey alırAçgözlü <.+> her iki etiketi de yutar./<.+?>/"<a><b>" → "<a>"

Bağlantı noktaları ve sınırlar

Bunlar bir karakterle değil bir konumla eşleşir, dolayısıyla hiçbir şey tüketmezler.

SözdizimiAnlamÖrnek
^Dizenin veya m bayrağını içeren bir satırın başlangıcı/^a/"abc" → "a"
$Dizenin sonu veya m bayrağını içeren bir satırın sonu/c$/"abc" → "c"
\bBir kelime sınırıBu, "birleştirme" içindeki "kedi" eşleşmesini durduran şeydir./\bcat\b/"the cat sat" → "cat"
\BKelime sınırı değil/\Bcat/"concatenate" → "cat"

Gruplar ve değişim

SözdizimiAnlamÖrnek
(abc)Yakalama grubu — değiştirilmek üzere hatırlandı/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Yakalamadan gruplamaBunu yalnızca gruplandırmaya ihtiyaç duyduğunuzda kullanın; yakalama sayılarını anlamlı tutar./(?:ab)+/"abab" → "abab"
(?<name>…)Adlandırılmış yakalama grubu/(?<year>\d{4})/"in 2026" → "2026"
a|bHer iki taraf da - değişimDönüşüm en düşük önceliğe sahiptir: ^a|b$ "^a" veya "b$"dır, "^(a|b)$" değil./cat|dog/"one dog" → "dog"
\1İlk gruba geri referans/(\w)\1/"letter" → "tt"

Çevreye bakış

Bir konumu çevreleyen şeylerle ilgili iddialar. Kendileri hiçbir şeye uymuyorlar, bu da onları birleştirmeyi güvenli kılan şey.

SözdizimiAnlamÖrnek
(?=…)Lookahead — bunu takip ediyor/\d+(?= kg)/"80 kg" → "80"
(?!…)Negatif bakış açısı - bunu takip etmiyor/\d+(?! kg)/"80 lb" → "80"
(?<=…)Arkaya bakma — bundan önce/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negatif geriye bakış — bundan önce gelmedi/(?<!\$)\b\d+/"about 40" → "40"

Kaçış

Bu on iki karakter, kelimenin tam anlamıyla anlaşılması için ters eğik çizgiye ihtiyaç duyan karakterlerdir.

SözdizimiAnlamÖrnek
\.Gerçek bir nokta/\d\.\d/"v2.5" → "2.5"
\\Gerçek bir ters eğik çizgi/\\/"C:\\dir" → "\\"
\nBir satır beslemesi/a\nb/"a\nb" → "a\nb"
\tBir sekme/a\tb/"a\tb" → "a\tb"
\uFFFFKod noktasına göre bir karakter/\u00e9/"café" → "é"

Bayraklar

BayrakİsimAnlam
gKüreselSadece ilkini değil, her eşleşmeyi bulun.
iBüyük/küçük harf durumunu yoksayBüyük veya küçük harfe bakılmaksızın eşleştirin.
mÇok satırlı^ ve $'ın yalnızca dizenin sonunda değil, her satır sonunda eşleşmesini sağlar.
sTümünü noktalaHaydi. maç çizgisi de bozulur.
uUnicodeDeseni kod noktaları olarak ele alır ve \p{…} özelliğinin kaçışını etkinleştirir.
yYapışkanYalnızca tam olarak lastIndex ile eşleşir, asla ileriye doğru arama yapmaz.

FAQ

Açgözlü ve tembel niceleyiciler arasındaki fark nedir?
Açgözlü niceleyiciler (*, +, {2,}) mümkün olduğu kadar eşleşir ve yalnızca desenin geri kalanı eşleşemediğinde karakterleri geri verir. Ekleniyor mu? onları tembelleştirir: mümkün olduğu kadar az eşleşirler ve ancak zorlandıklarında daha fazlasını alırlar. "<a><b>" üzerinde, <.+> modeli dizenin tamamını döndürür ve <.+?> yalnızca <a> öğesini döndürür.
Neden benim kelimem başka kelimelerin içinde eşleşiyor?
Çünkü onu sabitleyen hiçbir şey yoktu. Kelimeyi \b içine sarın — /\bcat\b/ "the cat sat" içindeki "cat" ile eşleşir ancak "concatenate" ile eşleşmez. \b, bir kelime karakteri ile kelime olmayan bir karakter arasındaki bir konumla eşleşir, dolayısıyla hiçbir şey tüketmez.
u bayrağı neyi değiştirir?
Desenin UTF-16 birimleri yerine kod noktaları üzerinde çalışmasını sağlar, böylece tek bir emoji bir karakter olarak sayılır ve "herhangi bir harf" için \p{L} gibi \p{…} özelliği kaçışlarına olanak tanır. Bu olmadan \w ve \d yalnızca ASCII olarak kalır, bu nedenle "café" /\w+/ ile tam olarak eşleşmez.
Yakalamayan bir grubu ne zaman kullanmalıyım?
Yakalanan metne ihtiyaç duymadan gruplamaya ihtiyaç duyduğunuzda (ab)+ yerine (?:ab)+. Yakalamalar biraz performansa mal olur, ancak asıl sebep numaralandırmadır: Eklediğiniz her yakalama grubu, kendisinden sonrakilerin numaralarını değiştirir ve 1 $ ve 2 $ kullanan değiştirmeleri sessizce bozar.
Arkaya bakmanın kullanımı güvenli midir?
Mevcut tarayıcılarda ve Node'da, evet — (?<=…) ve (?<!…) 2018'den bu yana tüm büyük motorlarda desteklenmektedir. Bunu en son ekleyen Safari oldu. Çok eski çalışma zamanlarını hedefliyorsanız öncelikle şunları kontrol edin; Regex sözdizimi için çoklu doldurma yoktur.