Utilia

Tester regulárních výrazů

Testuj regulární výrazy JavaScriptu naživo: zvýrazněné shody, zachytávací skupiny, nahrazování a srozumitelné vysvětlení každé části výrazu.

Příznaky

Shody
#PoziceShodaSkupiny

Vysvětlení výrazu

    Jak používat tester regulárních výrazů

    1. Napiš výraz do pole Regulární výraz, bez okolních lomítek. Lomítka a aktivní příznaky se zobrazují kolem pole, například /výraz/g.
    2. Zaškrtni potřebné Příznaky: g (global), i (ignorovat velikost písmen), m (multiline), s (dotAll), u (unicode) nebo y (sticky).
    3. Vlož text k prohledání do pole Testovací text. Shody se zvýrazňují během psaní a tabulka uvádí každou shodu s pozicí a zachytávacími skupinami.
    4. Chceš-li vyzkoušet nahrazení, vyplň Náhradu. Pole Výsledek po nahrazení ukáže text s každou shodou nahrazenou, připravený ke zkopírování.
    5. V části Vysvětlení výrazu zkontroluj, co dělá každá část regexu. Nevíš, kde začít? Klikni na Načíst příklad.

    Co tester zobrazuje

    • Zvýrazněné shody: každá shoda v testovacím textu je označena, takže na první pohled vidíš, co se zachytí a co unikne.
    • Tabulka shod: číslo každé shody, její pozice (posun ve znacích od začátku, počítáno od 0), shodný text a hodnota každé zachytávací skupiny. Pojmenované skupiny jako (?<year>\d{4}) se zobrazí pod svým názvem a skupiny, které se shody neúčastnily, jsou uvedeny jako „(nezachyceno)“. Vypíše se prvních 1 000 shod.
    • Náhrada: text náhrady používá syntaxi JavaScriptu: $1 nebo $2 pro číslované skupiny, $<name> pro pojmenované skupiny, $& pro celou shodu a $$ pro doslovný znak dolaru. Bez příznaku g se nahradí jen první shoda.
    • Vysvětlení: výraz se rozdělí na tokeny (doslovný text, třídy znaků, kotvy, skupiny, kvantifikátory, lookaround, zpětné odkazy), každý s krátkým popisem. Vnořené skupiny jsou odsazené, což dlouhé výrazy mnohem usnadňuje kontrolu.

    Příznaky stručně

    Příznak Účinek
    g Najde všechny shody místo zastavení u první
    i Ignoruje rozdíl mezi velkými a malými písmeny
    m ^ a $ se shodují se začátkem a koncem každého řádku
    s . zahrnuje i zalomení řádků
    u Plný režim Unicode: \u{…}, \p{…} a emoji se berou jako jednotlivé znaky
    y Sticky: každá shoda musí začínat přesně tam, kde skončila předchozí

    Katastrofální backtracking

    Některé výrazy trvají na textu, který se skoro shoduje, exponenciálně dlouho. Klasickým příkladem je (a+)+$ testované na dlouhé řadě písmen a následované b: engine zkouší každý způsob rozdělení písmen a mezi dva kvantifikátory, než to vzdá. Tento problém, známý jako ReDoS, už vyřadil skutečné weby.

    Tento nástroj chrání tvůj prohlížeč třemi způsoby. Hledání běží v pracovním vlákně na pozadí, které se po 1,5 sekundě zastaví; testovací text je omezen na 100 000 znaků; a vysvětlení tě varuje, když opakovaná skupina obsahuje další neomezený kvantifikátor. Když výraz překročí časový limit, přepiš ho tak, aby se každý znak dal zachytit jen jedním způsobem, například a+$ místo (a+)+$.

    Časté dotazy

    Jakou variantu regexu nástroj používá?

    Používá engine JavaScriptu (ECMAScript) ve tvém prohlížeči, přesně jako new RegExp() a String.prototype.replace() ve tvém kódu. Většina syntaxe je společná s PCRE, Pythonem a Javou, ale některé vlastnosti se liší: přivlastňovací kvantifikátory a atomické skupiny v JavaScriptu neexistují a lookbehind podporují všechny současné prohlížeče.

    Proč můj výraz najde jen jednu shodu?

    Příznak g je vypnutý. Bez něj se JavaScript zastaví po první shodě a nahrazení změní jen ji.

    Jak zachytím doslovnou tečku, hranatou závorku nebo otazník?

    Escapuj je zpětným lomítkem: \., \[, \?. Vysvětlení zobrazuje escapované znaky jako „(escapovaný)“, takže si to můžeš ověřit.

    Odesílá se můj text někam?

    Ne. Výraz i text se zpracovávají jen ve tvém prohlížeči, takže je nástroj bezpečný i pro soubory protokolů nebo data s osobními údaji.

    Proč se pozice liší od sloupce v mém editoru?

    Pozice se počítají ve znacích od 0 přes všechny řádky, tak jako match.index v JavaScriptu. Zalomení řádku se počítá jako jeden znak a emoji mimo základní vícejazyčnou rovinu se počítá jako dva.