Přeskočit na obsah
TextArray

Regex cheatsheet

Regulární výrazy jsou dostatečně kompaktní, takže syntaxi je snazší vyhledat než si zapamatovat. Tato stránka je celá na jedné obrazovce – třídy, kvantifikátory, kotvy, skupiny, rozhled, escapování a příznaky – s funkčním příkladem pro každý řádek.

Příchuť je JavaScript, což je to, co běží ve vašem prohlížeči a co používá tester regulárních výrazů na tomto webu. Většina z toho je identická v Pythonu, Javě, Go a PCRE; tam, kde se příchutě liší, rozcházejí se na okrajích — podpora lookbehind, syntaxe pojmenované skupiny a zda \d znamená "číslici ASCII" nebo "libovolnou číslici Unicode".

Za většinu překvapení stojí dvě věci. Kvantifikátory jsou chamtivé: vezmou vše, co mohou, a vrátí je zpět, až když zbytek vzoru selže, což je důvod, proč <.+> spolkne dva tagy a <.+?> ne. A alternace je nejvolnější ze všech, takže ^a|b$ znamená „začíná na a nebo končí na b“ – což většina lidí zamýšlí, když to píší.

Třídy postav

Zkratky jsou pouze ASCII, pokud nepřidáte příznak u a nepoužijete escape vlastnosti Unicode.

SyntaxVýznamPříklad
.Libovolný znak kromě zalomení řádkuPřidejte příznak s, aby odpovídal i novým řádkům./a.c/"abc" → "abc"
\dČíslice, 0–9/\d+/"order 42" → "42"
\DCokoli, co není číslice/\D+/"42abc" → "abc"
\wPísmeno, číslice nebo podtržítkoPouze ASCII — „é“ není \w./\w+/"user_1!" → "user_1"
\WCokoli \w neodpovídá/\W+/"a++b" → "++"
\sJakákoli mezera, včetně tabulátorů a nových řádků/\s+/"a \t b" → " \t "
\SJakýkoli znak bez mezer/\S+/" hi" → "hi"
[abc]Kterýkoli z uvedených znaků/[aeiou]/"rhythm and" → "a"
[^abc]Jakákoli postava kromě uvedených/[^aeiou ]+/"aeiou xyz" → "xyz"
[a-z]Řada postav/[a-f]+/"zzabcz" → "abc"
\p{L}Jakékoli písmeno Unicode (vyžaduje příznak u)/\p{L}+/"42 café" → "café"

Kvantifikátory

Všechny tyto jsou ve výchozím nastavení chamtivé: berou, kolik mohou, a vracejí zpět pouze v případě, že zbytek vzoru selže.

SyntaxVýznamPříklad
*Nula nebo více/ab*/"a" → "a"
+Jeden nebo více/ab+/"abbb" → "abbb"
?Nula nebo jedna – dělá to volitelné/colou?r/"color" → "color"
{3}Přesně tři/\d{3}/"id 12345" → "123"
{2,}Dvě nebo více/a{2,}/"aaa" → "aaa"
{2,4}Mezi dvěma a čtyřmi/a{2,4}/"aaaaa" → "aaaa"
*?Líný — bere co nejméněChamtivý <.+> by spolkl oba tagy./<.+?>/"<a><b>" → "<a>"

Kotvy a hranice

Ty odpovídají pozici, nikoli postavě, takže nic nespotřebovávají.

SyntaxVýznamPříklad
^Začátek řetězce nebo řádku s příznakem m/^a/"abc" → "a"
$Konec řetězce nebo řádku s příznakem m/c$/"abc" → "c"
\bHranice slovaTo je to, co zastaví "kočka" shodu uvnitř "concatenate"./\bcat\b/"the cat sat" → "cat"
\BŽádná hranice slova/\Bcat/"concatenate" → "cat"

Skupiny a střídání

SyntaxVýznamPříklad
(abc)Zachycující skupina – zapamatovaná pro nahrazení/(\d+)-(\d+)/"10-20" → "10-20"
(?:abc)Seskupování bez zachyceníPoužijte toto, když potřebujete pouze seskupení; zachovává význam zachycených čísel./(?:ab)+/"abab" → "abab"
(?<name>…)Pojmenovaná snímací skupina/(?<year>\d{4})/"in 2026" → "2026"
a|bObě strany — střídáníAlternace má nejnižší prioritu: ^a|b$ je "^a" nebo "b$", nikoli "^(a|b)$"./cat|dog/"one dog" → "dog"
\1Zpětný odkaz na první skupinu/(\w)\1/"letter" → "tt"

Rozhlédněte se

Tvrzení o tom, co obklopuje pozici. Samy se k ničemu nehodí, a proto je lze bezpečně kombinovat.

SyntaxVýznamPříklad
(?=…)Lookahead — následuje toto/\d+(?= kg)/"80 kg" → "80"
(?!…)Negativní výhled – toto není následováno/\d+(?! kg)/"80 lb" → "80"
(?<=…)Lookbehind — tomu předchází/(?<=\$)\d+/"costs $40" → "40"
(?<!…)Negativní lookbehind – tomu nepředchází/(?<!\$)\b\d+/"about 40" → "40"

Útěk

Těchto dvanáct znaků je těch, které potřebují zpětné lomítko, aby je bylo možné brát doslova.

SyntaxVýznamPříklad
\.Doslovná tečka/\d\.\d/"v2.5" → "2.5"
\\Doslovné zpětné lomítko/\\/"C:\\dir" → "\\"
\nPosuv řádku/a\nb/"a\nb" → "a\nb"
\tKarta/a\tb/"a\tb" → "a\tb"
\uFFFFZnak podle svého kódu/\u00e9/"café" → "é"

Vlajky

VlajkaJménoVýznam
gGlobálníNajděte každý zápas, nejen ten první.
iIgnorovat malá a velká písmenaShoda bez ohledu na velká nebo malá písmena.
mVíceřádkovýPřizpůsobí se ^ a $ při každém zalomení řádku, nikoli pouze na koncích řetězce.
sDot allPojďme . zápasová čára se také přeruší.
uUnicodeZachází se vzorem jako s kódovými body a povoluje úniky vlastností \p{…}.
yLepkavýShoduje se pouze na přesně lastIndex, nikdy nehledá dopředu.

Časté dotazy

Jaký je rozdíl mezi chamtivými a línými kvantifikátory?
Nenasytné kvantifikátory (*, +, {2,}) se co nejvíce shodují a vrátí znaky pouze v případě, že se zbytek vzoru nemůže shodovat. Přidávání ? dělá je línými: shodují se tak málo, jak je to možné, a berou více, jen když jsou nuceni. Na "<a><b>" vrací vzor <.+> celý řetězec a <.+?> vrací pouze <a>.
Proč se moje slovo shoduje v jiných slovech?
Protože to nic neukotvilo. Zabalte slovo do \b — /\bcat\b/ odpovídá „kočka“ v „kočka seděla“, ale ne uvnitř „zřetězit“. \b odpovídá pozici mezi slovním znakem a neslovním znakem, takže nic nespotřebovává.
Co změní vlajka u?
Díky tomu vzor pracuje s kódovými body spíše než s jednotkami UTF-16, takže jeden emotikon se počítá jako jeden znak a umožňuje úniky vlastností \p{…}, jako je \p{L} pro „jakékoli písmeno“. Bez něj zůstanou \w a \d pouze ASCII, což je důvod, proč "kavárna" plně neodpovídá /\w+/.
Kdy bych měl použít nezachycující skupinu?
Kdykoli potřebujete seskupení, ale ne zachycený text — (?:ab)+ místo (ab)+. Zachycení stojí trochu výkonu, ale skutečným důvodem je číslování: každá skupina zachycování, kterou přidáte, posune čísla těch po ní a tiše přeruší náhrady, které používají 1 $ a 2 $.
Je použití lookbehind bezpečné?
V současných prohlížečích a Node ano — (?<=…) a (?<!…) jsou podporovány napříč všemi hlavními enginy od roku 2018. Safari byl poslední, kdo to přidal. Pokud cílíte na velmi stará běhová prostředí, zkontrolujte nejprve; neexistuje žádná polyfill pro syntaxi regulárního výrazu.