UltKit

Tester regulárních výrazů (regex)

Zadejte vzor, zaškrtněte potřebné příznaky a vložte text: každá shoda se zvýrazní už během psaní a zobrazí se v seznamu s pozicí a zachytávacími skupinami. Vzor zpracovává vlastní regex engine JavaScriptu ve vašem prohlížeči, takže výsledky odpovídají vašemu kódu a text zůstává ve vašem zařízení.

Příznaky

0 znaků · 0 slov · 0 řádků

Shody se zvýrazní zde.

0 znaků · 0 slov · 0 řádků

Vše běží přímo v této záložce prohlížeče. Váš text se nikam nenahrává ani neukládá.

Tokeny regulárních výrazů v JavaScriptu

Sloupec první shody vznikl spuštěním každého vzoru na jeho textu pomocí enginu JavaScriptu, který tuto stránku sestavil.

TokenVýznamVzorTextPrvní shoda
\dČíslice 0–9/\d+/Order 66 shipped66
\wPísmeno, číslice nebo podtržítko (ASCII)/\w+/snake_case-idsnake_case
\sBílý znak včetně tabulátorů a zalomení řádků/\s+/two spaces
.Libovolný znak kromě zalomení řádku (pokud není s)/a.c/abc a-cabc
^ $Začátek a konec vstupu (nebo řádku, s m)/^\w+$/singlesingle
[abc]Jeden z uvedených znaků/[aeiou]/rhythm and bluesa
[^abc]Libovolný znak, který není uveden/[^0-9]+/2026-10-18-
* + ?0 nebo více, 1 nebo více, 0 nebo 1/colou?r/color colourcolor
{n,m}Mezi n a m opakováními/\d{2,4}/7 42 1999 12345642
(…)Zachytávající skupina/(\d+)px/width: 320px320px
(?<name>…)Pojmenovaná zachytávající skupina/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Skupina bez zachytávání/(?:ab)+/ababab!ababab
a|bJedna či druhá strana/cat|dog/hotdogdog
\bHranice slova/\bcat\b/concat catcat
(?=…)Následované (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Nepředchází (negativní lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Libovolné písmeno Unicode (vyžaduje u)/\p{L}+/unaïve 東京naïve

Šest příznaků a co mění

g (global) najde všechny shody místo zastavení u první; bez něj obsahuje seznam jediný záznam. i ignoruje velikost písmen. m (multiline) způsobí, že ^ a $ odpovídají začátku a konci každého řádku, ne jen celého textu, což se hodí třeba pro vzor na mezery na konci řádků. s (dotAll, přidáno v ES2018) umožní, aby . odpovídala i zalomení řádku. u (unicode) zachází s textem jako s kódovými body, takže emoji se počítá jako jeden znak, a zapíná vlastnosti znaků, například \p{L} pro libovolné písmeno v libovolném písmu. y (sticky) hledá shodu jen přesně na aktuální pozici, což využívají tokenizéry. JavaScript má také d pro indexy shod a v pro množinové operace ve třídách; tento tester zůstává u šesti výše uvedených.

Pod testovaným textem se u každé shody zobrazí její index a skupiny. Číslované skupiny vznikají z obyčejných závorek, (?:…) vytváří skupinu bez zachycení a (?<year>\d{4}) vytvoří pojmenovanou skupinu, která se zobrazí pod svým názvem, jak ukazuje ukázka s datem ISO. Nabídka Běžné vzory vkládá ověřené výchozí vzory pro e-mailové adresy, URL, adresy IPv4, hex barvy, UUID, opakovaná slova a mezery na konci řádků. Vzor pro e-mail berte jako orientační kontrolu, ne validaci: úplná gramatika adres je mnohem volnější a jediným skutečným testem je odeslání zprávy.

Lookbehind a katastrofický backtracking

Lookaroundy testují, co je kolem dané pozice, aniž by to spotřebovaly. Lookahead, (?=…) a (?!…), je v JavaScriptu odjakživa; lookbehind, (?<=…) a (?<!…), přišel v ES2018 a do všech hlavních prohlížečů se dostal, když ho v roce 2023 přidal Safari 16.4. Vzor (?<=\$)\d+ tedy v "$42" najde 42 bez znaku dolaru. Na rozdíl od mnoha jiných enginů povoluje JavaScript lookbehind libovolné délky.

Engine JavaScriptu používá backtracking: když cesta selže, vrátí se a zkusí alternativy. Vnořené kvantifikátory jako (a+)+$ mu dávají exponenciální počet způsobů, jak stejný text rozdělit, takže řetězec o 30 znacích a následovaný x může trvat vteřiny a pár dalších písmen i hodiny. Jde o katastrofální backtracking a na serverech z něj vzniká ReDoS, odepření služby; jediné pravidlo WAF s touto chybou 2. července 2019 vyřadilo síť Cloudflare zhruba na půl hodiny. Protože tester běží ve vaší kartě, takový vzor může stránku zamrazit; obnovte ji a vzor přepište tak, aby si žádné dva kvantifikátory nemohly nárokovat stejné znaky, s užšími třídami jako [^,]* místo .* nebo s kotvami. Pro úpravu samotného textu místo hledání shod viz textové nástroje; další nástroje pro vývojáře najdete v sekci nástroje pro vývojáře.

Často kladené otázky

Proč můj regulární výraz najde jen jednu shodu?
Je vypnutý příznak g. Bez něj se engine zastaví po první shodě. Zapněte g a zobrazí se všechny výskyty; samotný příznak y také najde více shod, ale jen pokud na sebe přímo navazují.
Odpovídá \d v JavaScriptu i číslicím z jiných písem?
Ne. V JavaScriptu \d znamená pouze 0 až 9 a \w pouze ASCII písmena, číslice a podtržítko, a to i s příznakem u. Pro jiná písma použijte \p{Nd} nebo \p{L} s příznakem u.
Bude se zde otestovaný vzor chovat stejně v Pythonu nebo PHP?
Základní syntaxe se přenáší, ale detaily se liší: pojmenované skupiny v Pythonu se píší (?P<name>…), PHP a Python podporují přivlastňovací kvantifikátory, které JavaScript nemá, a pravidla lookbehindu se liší. Otestujte vzor znovu v cílovém enginu.
Jak najít doslovnou tečku nebo závorku?
Escapujte ji zpětným lomítkem: \. odpovídá tečce a \[ levé hranaté závorce. Uvnitř třídy znaků je většina symbolů už doslovná, takže [.] také odpovídá jen tečce.
Proč stránka při psaní vzoru zamrzla?
Vzor pravděpodobně způsobil katastrofální backtracking na vašem textu. Obnovte stránku a vyhněte se vnořeným kvantifikátorům jako (.*)* nebo (a+)+ a každou část nechte odpovídat co nejmenšímu úseku.