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í.
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.
| Token | Význam | Vzor | Text | První shoda |
|---|---|---|---|---|
\d | Číslice 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Písmeno, číslice nebo podtržítko (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Bílý znak včetně tabulátorů a zalomení řádků | /\s+/ | two spaces | |
. | Libovolný znak kromě zalomení řádku (pokud není s) | /a.c/ | abc a-c | abc |
^ $ | Začátek a konec vstupu (nebo řádku, s m) | /^\w+$/ | single | single |
[abc] | Jeden z uvedených znaků | /[aeiou]/ | rhythm and blues | a |
[^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 colour | color |
{n,m} | Mezi n a m opakováními | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Zachytávající skupina | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Pojmenovaná zachytávající skupina | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Skupina bez zachytávání | /(?:ab)+/ | ababab! | ababab |
a|b | Jedna či druhá strana | /cat|dog/ | hotdog | dog |
\b | Hranice slova | /\bcat\b/ | concat cat | cat |
(?=…) | Následované (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Nepředchází (negativní lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Libovolné písmeno Unicode (vyžaduje u) | /\p{L}+/u | naï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.