Regex tester pro JavaScript

Napište regulární výraz a během psaní uvidíte zvýrazněnou každou shodu, včetně zachytávacích skupin, náhledu nahrazení a knihovny hotových vzorů.

Běží v prohlížečiBez registraceNic se neodesílá

Zvýrazněné shody

    
Použijte $1, $<name>, $& (celá shoda)
Podrobnosti shod
#IndexShodaSkupiny
Tahák regex
.Libovolný znak kromě nového řádku (s s jakýkoli)
\d \w \sČíslice, znak slova, bílý znak
\D \W \SNe číslice, ne znak slova, ne bílý znak
[abc] [^abc]Kterýkoli z / žádný z a, b, c
[a-z0-9]Rozsah znaků
\p{L} \p{N}Písmeno / číslo Unicode (vyžaduje u)
^ $Začátek / konec vstupu (řádku s m)
\b \BHranice slova / není hranice
* + ?0 a více, 1 a více, 0 nebo 1
{n} {n,} {n,m}Přesně n, alespoň n, mezi n a m
*? +? ??Líný (co nejméně)
a|ba nebo b
(…)Zachytávací skupina, odkaz přes $1
(?<name>…)Pojmenovaná skupina, $<name>
(?:…)Nezachytávací skupina
\1 \k<name>Zpětný odkaz
(?=…) (?!…)Lookahead / negativní lookahead
(?<=…) (?<!…)Lookbehind / negativní lookbehind
\. \* \\Escapované literální znaky
\n \t \rNový řádek, tabulátor, návrat vozíku
\uFFFFKódová jednotka Unicode
\u{1F600}Kódový bod (vyžaduje u)
$&Celá shoda v náhradě
$` $'Text před / za shodou

Jak používat: Regex tester

  1. Zadejte vzor mezi lomítka, bez okolních /.
  2. Přepínejte příznaky jako g (všechny shody), i (bez rozlišení velikosti) a m (víceřádkový).
  3. Vložte testovací text. Shody se zvýrazní vpravo a níže se vypíšou s indexem a zachytávacími skupinami.
  4. Zaškrtněte Nahradit a zadejte náhradu jako $1 nebo $<name> pro náhled String.replace.
  5. 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říznakNázevÚčinek
gglobalNajde všechny shody místo zastavení u první.
iignoreCasePísmena odpovídají bez ohledu na velikost.
mmultiline^ a $ odpovídají na začátku a konci každého řádku.
sdotAll. odpovídá i zalomení řádku.
uunicodePracuje se vzorem jako s kódovými body; umožní \p{…} a \u{…}.
ystickyHledá shodu jen na aktuální pozici lastIndex.
dhasIndicesVrací 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ě.

Související nástroje