Návod
Jak otestovat regex bez jakékoli instalace
Napsali jste vzor a potřebujete vědět, jestli opravdu odpovídá tomu, co čekáte, dříve než ho vložíte do kódu. Instalovat desktopový nástroj nebo vkládat soukromý log na náhodný web je přehnané a často riskantní. Tento průvodce ukazuje, jak spustit regex na vlastním textu přímo v prohlížeči, přepínat příznaky, které mění chování, číst zachytávací skupiny, které vytáhne, a sledovat, jak se shody zvýrazní přímo v textu, přičemž vzor ani text nikdy neopustí vaši záložku.
Krok za krokem
- Otevřete tester regulárních výrazů a napište svůj vzor do pole mezi dvěma lomítky. Lomítka nepíšete sami: nástroj je zobrazuje, abyste viděli vzor tak, jak ho čte stroj. Vložte ukázkový text do pole níže, například pár řádků logu, seznam e-mailových adres nebo blok kódu, který chcete prohledat.

- Nastavte příznaky v malém poli vedle vzoru. Příznak g najde každou shodu místo toho, aby se zastavil u první; i způsobí, že shoda nerozlišuje velikost písmen; m umožní kotvám ^ a $ odpovídat začátku a konci každého řádku místo celého textu; s umožní tečce odpovídat i zalomením řádku. Volně je kombinujte, například gim.
- Stiskněte Test. Každá shoda se zvýrazní přímo ve vašem textu a seznam níže zobrazí každou shodu s její pozicí a hodnotou každé zachytávací skupiny. Upravte vzor a spusťte ho znovu: náhled se aktualizuje, abyste mohli vzor zužovat, dokud nezachytí přesně to, co jste měli na mysli, a nic jiného.

Zachytávací skupiny, pojmenované a číslované
Zachytávací skupina je část vzoru uzavřená v závorkách a je to způsob, jak z každé shody vytáhnete kousek místo pouhého potvrzení, že se celý výraz shodoval. Číslované skupiny se počítají zleva doprava podle jejich otevírací závorky: v (\d{4})-(\d{2})-(\d{2}) je skupina 1 rok, skupina 2 měsíc, skupina 3 den. Pojmenované skupiny používají syntaxi (?<name>...), takže (?<year>\d{4}) se čte mnohem lépe než holé číslo, když vzor roste. Pokud chcete jen seskupit bez zachytávání, například abyste použili kvantifikátor na několik znaků, použijte nezachytávající skupinu (?:...), aby vám nezahltila seznam výsledků. Tester zobrazuje hodnotu každé skupiny pro každou shodu, což je nejrychlejší způsob, jak ověřit, že vytahujete správnou část.
Když se vzor zasekne nebo chová špatně
Dva problémy se objevují znovu a znovu. První je katastrofický zpětný krok: vzor jako (a+)+$ spuštěný na dlouhém řetězci, který se neshoduje, může stroj donutit zkoušet exponenciální počet cest a zamrznout. Tester spouští každý test ve Web Worker s krátkým hlídacím časovačem, takže místo zaseknuté záložky dostanete jasnou zprávu a můžete vzor zjednodušit, obvykle tím, že kvantifikátor v duchu změníte na posesivní, ukotvíte ho nebo se vyhnete vnořenému opakování. Druhý je hltavé versus lenivé porovnávání: ve výchozím nastavení .* zabere co nejvíc, takže pro shodu s obsahem jedné značky HTML chcete místo toho lenivou formu .*?. Pokud porovnáváte dvě mírně odlišné verze řetězce, abyste viděli, na co by měl váš vzor cílit, nástroj pro rozdíly textu je zarovná vedle sebe, takže rozdíl je zřejmý dříve, než napíšete výraz.
Jak prohlížeč vyhodnocuje váš regex
Moderní prohlížeče mají vestavěný ECMAScript regex engine, který podporuje celou sadu příznaků: porovnávání bez rozlišení velikosti písmen (i), víceřádkový režim (m), dotAll (s), Unicode (u) a lepivý příznak (y). Když zadáte vzor do testeru, engine ho zkompiluje do interního NFA a vyhodnotí ho oproti vašemu testovacímu řetězci v reálném čase, přičemž nahlásí každou pozici shody a veškeré zachytávací skupiny. Zpětné sledování probíhá lokálně na vašem CPU: vzor jako (a+)+ na dlouhém neodpovídajícím řetězci může chvíli běžet a vidět toto zastavení v prohlížeči je užitečná zpětná vazba před nasazením vzoru v produkčním kódu. Žádný text neopustí stránku, takže můžete vložit ukázky logů nebo jakýkoli vstup bez jeho směrování přes server třetí strany.
Nástroje použité v tomto návodu
Časté dotazy
Odesílá se můj vzor nebo testovací text na server?
Ne. Regex běží ve Web Worker ve vašem vlastním prohlížeči, takže vzor i text, na kterém testujete, zůstávají v záložce. Na tom záleží, protože text, který vkládáte, je často skutečný log, seznam zákazníků nebo interní konfigurace, přesně ten druh dat, která nechcete mít na cizím serveru. Otevřete panel Síť ve vývojářských nástrojích, když stisknete Test, a neuvidíte žádný požadavek, který by váš text odnesl ven. Funguje i offline, jakmile se stránka načte.
Kterou variantu regexu tester používá?
Používá stroj regulárních výrazů JavaScript zabudovaný ve vašem prohlížeči, tentýž, který běží v Node.js a na každé webové stránce. To pokrývá běžnou syntaxi: třídy znaků, kvantifikátory, kotvy, alternaci, číslované i pojmenované zachytávací skupiny, dopředný i zpětný pohled. Několik funkcí z jiných variant, jako rekurze ve stylu Perl nebo posesivní kvantifikátory, není součástí stroje JavaScript, takže pokud se vzor, který jste zkopírovali z projektu PHP nebo Python, chová jinak, obvykle je důvodem právě tento rozdíl ve variantě.