Regex
Tester regulárních výrazů
Testujte regulární výrazy na vlastním textu, naživo.
O regulárních výrazech
Regulární výraz (regex) je vzor popisující množinu řetězců — používá se k vyhledávání, ověřování nebo extrakci textu. Tento tester spouští nativní regex engine JavaScriptu zcela ve vašem prohlížeči, takže si můžete vyzkoušet vzor na skutečném textu a přesně vidět, co odpovídá.
Kvantifikátory existují ve dvou snadno zaměnitelných variantách: hladové (+, *, {2,5}) spotřebují co nejvíce textu, než se vrátí zpět (backtracking), aby umožnily shodu zbytku vzoru, zatímco jejich líné protějšky (+?, *?, {2,5}?) spotřebují naopak co nejméně. Proti <a><b> se vzorem <.+> zabere hladová shoda celý řetězec, zatímco <.+?> se zastaví u prvního >. Podobnou vidlici mají i skupiny: (...) zachytí odpovídající text pro pozdější odkaz, zatímco (?:...) seskupuje stejným způsobem, ale bez zachycení — užitečné, když potřebujete prioritu seskupení, ale ne jeho výstup.
Kde se s tím setkáte
- Ověřování vstupních formátů, jako jsou e-mailové adresy, telefonní čísla nebo poštovní směrovací čísla
- Extrakce strukturovaných hodnot z řádků logu nebo nestrukturovaného textu
- Psaní vzoru pro hledání a nahrazení při refaktoringu napříč mnoha soubory
- Debugování, proč vzor odpovídá více nebo méně, než jste očekávali
Často kladené otázky
Proč můj vzor odpovídá jen jednou?
Bez příznaku g (global) se metody regulárních výrazů JavaScriptu zastaví po první shodě — to je skutečné chování, které by viděl i váš kód, nikoli omezení tohoto nástroje. Zapněte g, abyste našli všechny shody.
Odesílá se to, co sem napíšu, na server?
Ne. Porovnávání probíhá zcela ve vašem prohlížeči pomocí vestavěného regex enginu JavaScriptu — nic se nikam nepřenáší, což také zabraňuje vystavení serveru záměrně pomalému vzoru typu „catastrophic backtracking“.
Proč se stránka u některých vzorů občas zasekne?
Určité vzory, jako vnořené kvantifikátory typu (a+)+, mohou způsobit catastrophic backtracking, kdy doba porovnávání exponenciálně roste s délkou vstupu. Pokud se vzor zasekne, je to problém samotného vzoru, ne tohoto nástroje — zkuste kratší testovací text nebo vzor přepište tak, aby se vyhnul vnořenému opakování.
Jaký je rozdíl mezi hladovými a línými kvantifikátory?
Hladový kvantifikátor (+, *, {2,5}) nejprve shoduje co nejvíce textu a vrací se zpět jen tehdy, pokud tím zbytek vzoru selže. Jeho líný protějšek, zapsaný s koncovým ? (+?, *?), naopak shoduje co nejméně a rozšiřuje se jen tehdy, když musí. Proti <a><b> odpovídá hladový vzor <.+> celému řetězci, zatímco líný <.+?> se zastaví u prvního >. Sáhněte po líných kvantifikátorech vždy, když je „nejkratší možná shoda“ přesně to, co chcete.