Regex tester
Zadajte vzor, zaškrtnite potrebné príznaky a vložte text: každá zhoda sa zvýrazní už počas písania a zobrazí sa v zozname s pozíciou a zachytávacími skupinami. Vzor spracúva vlastný regexový engine JavaScriptu vo vašom prehliadači, takže výsledky zodpovedajú vášmu kódu a text zostáva vo vašom zariadení.
0 znakov · 0 slov · 0 riadkov
Zhody sa zvýraznia tu.0 znakov · 0 slov · 0 riadkov
Všetko prebieha priamo v tejto karte prehliadača. Váš text sa nikdy nenahráva ani neukladá.
Tokeny regulárnych výrazov v JavaScripte
Stĺpec prvej zhody vznikol spustením každého vzoru na jeho texte v engine JavaScriptu, ktorý zostavil túto stránku.
| Token | Význam | Vzor | Text | Prvá zhoda |
|---|---|---|---|---|
\d | Číslica 0–9 | /\d+/ | Order 66 shipped | 66 |
\w | Písmeno, číslica alebo podčiarkovník (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Biely znak vrátane tabulátorov a zalomení riadkov | /\s+/ | two spaces | |
. | Ľubovoľný znak okrem zalomenia riadka (okrem s) | /a.c/ | abc a-c | abc |
^ $ | Začiatok a koniec vstupu (alebo riadka, s m) | /^\w+$/ | single | single |
[abc] | Jeden z uvedených znakov | /[aeiou]/ | rhythm and blues | a |
[^abc] | Ľubovoľný znak, ktorý nie je uvedený | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 alebo viac, 1 alebo viac, 0 alebo 1 | /colou?r/ | color colour | color |
{n,m} | Od n do m-krát | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Zachytávajúca skupina | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Pomenovaná zachytávajúca skupina | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Skupina bez zachytávania | /(?:ab)+/ | ababab! | ababab |
a|b | Ktorákoľvek strana | /cat|dog/ | hotdog | dog |
\b | Hranica slova | /\bcat\b/ | concat cat | cat |
(?=…) | Nasleduje (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Nepredchádza (negatívny lookbehind) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Ľubovoľné písmeno Unicode (vyžaduje u) | /\p{L}+/u | naïve 東京 | naïve |
Šesť príznakov a čo menia
g (global) nájde všetky zhody namiesto zastavenia pri prvej; bez neho obsahuje zoznam jeden záznam. i ignoruje veľkosť písmen. m (multiline) spôsobí, že ^ a $ sedia na začiatku a konci každého riadku, nielen celého textu, čo potrebujete pri vzore, napríklad pre medzery na konci riadkov. s (dotAll, pridané v ES2018) umožní, aby . zodpovedala aj zalomeniam riadkov. u (unicode) berie text ako kódové body, takže emoji sa počíta ako jeden znak, a zapína vlastnosti ako \p{L} pre ľubovoľné písmeno v akomkoľvek písme. y (sticky) hľadá zhodu presne na aktuálnej pozícii, tento režim používajú tokenizéry. JavaScript pozná aj d pre indexy zhôd a v pre množinové operácie v triedach; tento tester používa len šesť uvedených.
Pod testovacím textom ukazuje každá zhoda svoj index a skupiny. Číslované skupiny vznikajú z obyčajných zátvoriek, (?:…) zoskupuje bez zachytenia a (?<year>\d{4}) vytvorí pomenovanú skupinu, ktorá sa zobrazí pod svojím názvom, ako ukazuje ukážka s dátumom ISO. Ponuka Bežné vzory vkladá otestované východiská pre e-mailové adresy, URL, adresy IPv4, hexadecimálne farby, UUID, opakované slová a medzery na konci riadkov. Vzor pre e-mail berte ako orientačnú kontrolu, nie validáciu: úplná gramatika adries je oveľa voľnejšia a jediný skutočný test je odoslanie správy.
Lookbehind a katastrofický backtracking
Lookaround testuje, čo je okolo pozície, bez toho, aby to spotreboval. Lookahead, (?=…) a (?!…), je súčasťou JavaScriptu odjakživa; lookbehind, (?<=…) a (?<!…), prišiel v ES2018 a vo všetkých hlavných prehliadačoch sa objavil, keď ho v roku 2023 pridal Safari 16.4. Takže (?<=\$)\d+ nájde 42 v „$42“ bez znaku dolára. Na rozdiel od mnohých iných nástrojov JavaScript dovoľuje lookbehind ľubovoľnej dĺžky.
Engine JavaScriptu používa backtracking: keď cesta zlyhá, vráti sa a skúša alternatívy. Vnorené kvantifikátory ako (a+)+$ mu dávajú exponenciálny počet spôsobov, ako rozdeliť ten istý text, takže reťazec 30 znakov a s x na konci môže trvať sekundy a pár ďalších písmen aj hodiny. Ide o katastrofický backtracking, ktorý sa na serveroch mení na ReDoS, odopretie služby; jediné pravidlo WAF s touto chybou vyradilo 2. júla 2019 sieť Cloudflare asi na pol hodiny. Keďže tento tester beží vo vašej karte, takýto vzor môže stránku zamrznúť; obnovte ju a prepíšte vzor tak, aby dva kvantifikátory nemohli zachytávať tie isté znaky, použite užšie triedy ako [^,]* namiesto .*, alebo kotvy. Na úpravu samotného textu, nie jeho hľadanie, pozrite textové nástroje; ďalšie nástroje pre vývojárov nájdete v centre nástroje pre vývojárov.
Často kladené otázky
- Prečo môj regulárny výraz nájde len jednu zhodu?
- Je vypnutý príznak g. Bez neho sa engine zastaví po prvej zhode. Zaškrtnite g, aby sa vypísali všetky výskyty; samotný príznak y nájde tiež viac zhôd, ale len keď po sebe bezprostredne nasledujú.
- Zachytí \d v JavaScripte aj číslice z iných písiem?
- Nie. V JavaScripte \d znamená len 0 až 9 a \w len ASCII písmená, číslice a podčiarkovník, aj s príznakom u. Pre iné písma použite \p{Nd} alebo \p{L} s u.
- Bude sa tu otestovaný vzor správať rovnako v Pythone alebo PHP?
- Základná syntax sa prenáša, ale detaily sa líšia: pomenované skupiny v Pythone sa píšu
(?P<name>…), PHP a Python podporujú posesívne kvantifikátory, ktoré JavaScript nemá, a pravidlá lookbehindu sa líšia. Otestujte vzor znova v cieľovom engine. - Ako zachytiť doslovnú bodku alebo zátvorku?
- Escapujte ho spätnou lomkou:
\.zodpovedá bodke a\[otváracej hranatej zátvorke. V triede znakov je väčšina symbolov už doslovná, takže[.]tiež zodpovedá len bodke. - Prečo stránka zamrzla, keď som písal vzor?
- Vzor pravdepodobne spôsobil katastrofický backtracking na vašom texte. Obnovte stránku a vyhnite sa vnoreným kvantifikátorom ako
(.*)*alebo(a+)+a nech každá časť zodpovedá čo najmenšiemu počtu znakov.