Ugrás a tartalomhoz
TextArray

Regex csalólap

A reguláris kifejezések elég tömörek ahhoz, hogy a szintaxist könnyebben meg lehessen nézni, mint megjegyezni. Ez az oldal az egészet egy képernyőn mutatja – osztályok, kvantorok, horgonyok, csoportok, körültekintés, menekülés és zászlók – minden sorhoz egy működő példával.

Az íz a JavaScript, amely az Ön böngészőjében fut, és az ezen az oldalon található regex-tesztelő. A legtöbb azonos a Pythonban, a Java-ban, a Go-ban és a PCRE-ben; ahol az ízek eltérnek, ott a széleken eltérnek – hátulnézet támogatás, elnevezett csoport szintaxisa, és hogy a \d „ASCII számjegyet” vagy „bármely Unicode számjegyet” jelent-e.

A legtöbb meglepetést két dolog okozza. A kvantorok mohók: mindent elvesznek, amit csak tudnak, és csak akkor adnak vissza, ha a minta többi része meghiúsul, ezért a <.+> lenyel két címkét, a <.+?> pedig nem. A váltakozás pedig a leglazábban köt, így az ^a|b$ azt jelenti, hogy „a-vel kezdődik, vagy b-vel végződik” – ez nem az, amire a legtöbben gondolnak, amikor írják.

Karakter osztályok

A rövidítések csak ASCII-t használnak, hacsak nem adja hozzá az u jelzőt, és Unicode tulajdonság escape-kódokat használ.

SzintaxisJelentésePélda
.Bármely karakter, kivéve a sortöréstAdja hozzá az s zászlót, hogy az újsorokhoz is illeszkedjen./a.c/"abc" → "abc"
\dEgy számjegy, 0-9/\d+/"order 42" → "42"
\DBármi, ami nem számjegy/\D+/"42abc" → "abc"
\wBetű, szám vagy aláhúzásCsak ASCII – az „é” nem \w./\w+/"user_1!" → "user_1"
\WBármi, \w nem egyezik/\W+/"a++b" → "++"
\sBármilyen szóköz, beleértve a tabulátorokat és az újsorokat is/\s+/"a \t b" → " \t "
\SBármilyen nem szóköz karakter/\S+/" hi" → "hi"
[abc]A felsorolt karakterek bármelyike/[aeiou]/"rhythm and" → "a"
[^abc]Bármely karakter, kivéve a felsorolt karaktereket/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Egy sor karakter/[a-f]+/"zzabcz" → "abc"
\p{L}Bármilyen Unicode betű (szükség van az u zászlóra)/\p{L}+/"42 café" → "café"

Kvantifikátorok

Ezek mindegyike alapból mohó: annyit vesznek el, amennyit tudnak, és csak akkor adják vissza, ha a minta többi része nem sikerül.

SzintaxisJelentésePélda
*Nulla vagy több/ab*/"a" → "a"
+Egy vagy több/ab+/"abbb" → "abbb"
?Nulla vagy egy – opcionálissá teszi/colou?r/"color" → "color"
{3}Pontosan három/\d{3}/"id 12345" → "123"
{2,}Kettő vagy több/a{2,}/"aaa" → "aaa"
{2,4}Kettő és négy között/a{2,4}/"aaaaa" → "aaaa"
*?Lusta – a lehető legkevesebbet veszi igénybeA mohó <.+> mindkét címkét lenyelné./<.+?>/"<a><b>" → "<a>"

Horgonyok és határok

Ezek egy pozícióhoz illenek, nem egy karakterhez, tehát nem fogyasztanak semmit.

SzintaxisJelentésePélda
^A karakterlánc vagy egy sor eleje az m jelzővel/^a/"abc" → "a"
$A karakterlánc vége vagy egy sor vége m jelzővel/c$/"abc" → "c"
\bEgy szóhatárEz az, ami megakadályozza, hogy a "macska" illeszkedjen az "összefűzésben"./\bcat\b/"the cat sat" → "cat"
\BEgy szó sem határ/\Bcat/"concatenate" → "cat"

Csoportok és váltakozás

SzintaxisJelentésePélda
(abc)Rögzítési csoport – emlékezve cserére/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Csoportosítás rögzítés nélkülHasználja ezt, ha csak a csoportosításra van szüksége; a rögzítési számokat értelmesnek tartja./(?:ab)+/"abab" → "abab"
(?<name>…)Elfogó csoport neve/(?<year>\d{4})/"in 2026" → "2026"
a|bMindkét oldal - váltakozásAz alternatíva a legalacsonyabb prioritású: ^a|b$ a "^a" vagy "b$", nem pedig a "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Visszautalások az első csoportra/(\w)\1/"letter" → "tt"

Nézz körül

Állítások arról, hogy mi vesz körül egy pozíciót. Maguk semmihez sem egyeznek, ezért biztonságosan kombinálhatók.

SzintaxisJelentésePélda
(?=…)Előretekintés – ezt követi/\d+(?= kg)/"80 kg" → "80"
(?!…)Negatív előretekintés – ezt nem követi/\d+(?! kg)/"80 lb" → "80"
(?<=…)Nézz mögé – ezt előzi meg/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negatív hátranézés – ezt nem előzi meg/(?<!\$)\b\d+/"about 40" → "40"

Menekülés

Ez a tizenkét karakter az, aminek szó szerinti értelmezéséhez fordított perjelre van szükség.

SzintaxisJelentésePélda
\.Egy szó szerinti pont/\d\.\d/"v2.5" → "2.5"
\\Szó szerinti fordított perjel/\\/"C:\\dir" → "\\"
\nSoremelés/a\nb/"a\nb" → "a\nb"
\tEgy lap/a\tb/"a\tb" → "a\tb"
\uFFFFEgy karakter a kódpontja szerint/\u00e9/"café" → "é"

Zászlók

ZászlóNévJelentése
gGlobálisKeressen minden egyezést, ne csak az elsőt.
iKis- és nagybetűk figyelmen kívül hagyásaEgyezzen a kis- vagy nagybetűtől függetlenül.
mTöbbsorosA ^-t és a $-t minden sortörésnél egyezik, nem csak a karakterlánc végén.
sPont mindenHadd . meccssor szakad is.
uUnicodeA mintát kódpontként kezeli, és engedélyezi a \p{…} tulajdonság escape-kódot.
yRagadósCsak pontosan a lastIndexnél egyezik, soha nem keres előre.

Gyakori kérdések

Mi a különbség a mohó és a lusta kvantorok között?
A mohó kvantorok (*, +, {2,}) a lehető legnagyobb mértékben megegyeznek, és csak akkor adnak vissza karaktereket, ha a minta többi része nem egyezik. Hozzáadása ? lustává teszi őket: a lehető legkevesebbet passzolnak egymáshoz, és csak kényszerítve vesznek el többet. Az "<a><b>"-on a <.+> minta a teljes karakterláncot adja vissza, a <.+?> pedig csak az <a>-t.
Miért egyezik a szavam más szavakkal?
Mert semmi sem rögzítette. A szót \b – /\bcat\b/ tördelje a „cat” kifejezéssel a „macska ült” szóval, de ne a „concatenate” szóval. A \b egy szókarakter és egy nem szó karakter közötti pozíciót egyezik meg, tehát semmit sem használ.
Mit változtat az u zászló?
Ezáltal a minta kódpontokon működik, nem pedig UTF-16 egységeken, így egyetlen emoji egy karakternek számít, és engedélyezi a \p{…} tulajdonság escape-kódot, például \p{L} "bármely betű" esetén. Enélkül a \w és \d csak ASCII marad, ezért a "café" nem egyezik teljesen a /\w+/-vel.
Mikor használjak nem rögzítő csoportot?
Amikor szüksége van a csoportosításra, de nem a rögzített szövegre – (?:ab)+ az (ab)+ helyett. A rögzítések egy kis teljesítménybe kerülnek, de az igazi ok a számozás: minden hozzáadott rögzítési csoport eltolja az utána lévők számát, csendesen feltörve az 1 és 2 dollárt használó cseréket.
Biztonságos a lookbehind használata?
A jelenlegi böngészőkben és a Node-ban igen – (?<=…) és (?<!…) 2018 óta minden nagyobb motor támogatja. A Safari volt az utolsó, amely hozzáadta. Ha nagyon régi futtatókörnyezeteket céloz meg, először ellenőrizze; nincs polifill a regex szintaxishoz.