Jak používat: Regex tester
- Zadejte vzor mezi lomítka, bez okolních
/. - Přepínejte příznaky jako
g (všechny shody), i (bez rozlišení velikosti) a m (víceřádkový). - Vložte testovací text. Shody se zvýrazní vpravo a níže se vypíšou s indexem a zachytávacími skupinami.
- Zaškrtněte Nahradit a zadejte náhradu jako
$1 nebo $<name> pro náhled String.replace. - Vyberte vzor z Knihovny vzorů a začněte od vyzkoušeného regexu pro e-mail, URL, IP nebo datum.
Regulární výrazy v JavaScriptu
Tento tester používá vlastní engine RegExp vašeho prohlížeče, takže výsledky jsou přesně takové, jaké vracejí String.match, matchAll, replace a RegExp.exec v JavaScriptu a Node.js. To zahrnuje i moderní syntaxi: pojmenované skupiny (?<name>…), lookbehind (?<=…), třídy vlastností Unicode jako \p{L} s příznakem u a indexy shod s příznakem d.
Co dělají příznaky
| Příznak | Název | Účinek |
g | global | Najde všechny shody místo zastavení u první. |
i | ignoreCase | Písmena odpovídají bez ohledu na velikost. |
m | multiline | ^ a $ odpovídají na začátku a konci každého řádku. |
s | dotAll | . odpovídá i zalomení řádku. |
u | unicode | Pracuje se vzorem jako s kódovými body; umožní \p{…} a \u{…}. |
y | sticky | Hledá shodu jen na aktuální pozici lastIndex. |
d | hasIndices | Vrací počáteční a koncové pozice každé zachytávací skupiny. |
Ochrana proti katastrofickému backtrackingu
Vzory s vnořenými kvantifikátory, například (a+)+$ nebo (\w|\d)*x, mohou na téměř odpovídajících vstupech běžet exponenciálně dlouho. Na běžné webové stránce to kartu zamrazí. Zde každé hledání běží na pozadí ve Web Workeru, který se po jedné sekundě zastaví, a místo zamrzlého prohlížeče dostanete jasné varování. Stejný vzor v produkčním kódu může být zranitelností ReDoS, proto varování berte jako chybu k opravě.
Tipy pro lepší regexy
- Při validaci celých hodnot ukotvěte vzory pomocí
^ a $, jinak projde shoda kdekoli v řetězci.
- Dávejte přednost konkrétním třídám jako
[^"]* před .*; jsou rychlejší a nezachytí víc, než mají.
- Používejte nezachytávací skupiny
(?:…), když zachycenou hodnotu nepotřebujete.
- Pojmenujte skupiny.
match.groups.year se čte lépe než match[1].
Časté dotazy
Jakou variantu regexu tento tester používá?
JavaScript (ECMAScript) přes vestavěný RegExp vašeho prohlížeče. Většina syntaxe je společná s PCRE, Pythonem a Javou, ale funkce jako posesivní kvantifikátory, atomické skupiny a inline modifikátory jako (?i) v JavaScriptu nejsou.
Proč můj vzor najde jen jednu shodu?
Bez příznaku g (global) se JavaScript zastaví po první shodě. Zapněte g a najdete všechny výskyty.
Jak se v náhradě odkázat na skupiny?
Použijte $1, $2… pro číslované skupiny, $<name> pro pojmenované skupiny, $& pro celou shodu a $$ pro doslovný znak dolaru.
Proč se tester zastavil kvůli časovému limitu?
Vzor na vašem vstupu běžel déle než sekundu, což téměř vždy znamená katastrofický backtracking. Hledejte vnořené kvantifikátory jako (x+)+ nebo překrývající se alternativy jako (a|a)* a přepište je tak, aby každý znak mohl odpovídat jen jedním způsobem.
Odesílají se moje testovací data někam?
Ne. Hledání shod běží lokálně ve Web Workeru ve vašem prohlížeči. Vzor a text se ukládají jen ve vašem prohlížeči, aby tam byly i při příští návštěvě.