Utilia

Tester regulárnych výrazov

Testuj regulárne výrazy JavaScriptu naživo so zvýraznenými zhodami, zachytávacími skupinami, nahradením a vysvetlením každého prvku vzoru v bežnom jazyku.

Príznaky

Zhody
#PozíciaZhodaSkupiny

Vysvetlenie vzoru

    Ako používať tester regulárnych výrazov

    1. Napíš vzor do poľa Regulárny výraz bez okolitých lomiek. Lomky a aktívne príznaky sa zobrazujú okolo poľa, ako v /vzor/g.
    2. Zaškrtni potrebné Príznaky: g (global), i (ignorovať veľkosť písmen), m (multiline), s (dotAll), u (unicode) alebo y (sticky).
    3. Vlož text na prehľadávanie do poľa Testovací text. Zhody sa zvýrazňujú počas písania a tabuľka uvádza každú zhodu s jej pozíciou a zachytávacími skupinami.
    4. Ak chceš vyskúšať nahradenie, vyplň Náhrada. Pole Výsledok po nahradení ukáže text s každou nahradenou zhodou, pripravený na skopírovanie.
    5. V Vysvetlení vzoru skontroluj, čo robí každá časť tvojho regexu. Nevieš, kde začať? Klikni na Načítať príklad.

    Funguje v tvojom prehliadači. Nič, čo zadáš, sa neodosiela na server.

    Čo tester ukazuje

    • Zvýraznené zhody: každá zhoda v testovacom texte je označená, takže na prvý pohľad vidíš, čo sa zachytilo a čo nie.
    • Tabuľka zhôd: číslo každej zhody, jej pozícia (posun znakov od začiatku, počítaný od 0), zhodný text a hodnota každej zachytávacej skupiny. Pomenované skupiny ako (?<year>\d{4}) sa zobrazia pod svojím názvom a skupiny, ktoré sa na zhode nezúčastnili, sa zobrazia ako „(bez zhody)“. Uvedených je prvých 1 000 zhôd.
    • Náhrada: text náhrady používa syntax JavaScriptu: $1 alebo $2 pre číslované skupiny, $<name> pre pomenované skupiny, $& pre celú zhodu a $$ pre doslovný znak dolára. Bez príznaku g sa nahradí len prvá zhoda.
    • Vysvetlenie: vzor sa rozdelí na prvky (doslovný text, triedy znakov, kotvy, skupiny, kvantifikátory, lookaround, spätné odkazy), každý s krátkym popisom. Vnorené skupiny sú odsadené, vďaka čomu sa dlhé vzory kontrolujú oveľa ľahšie.

    Príznaky stručne

    Príznak Účinok
    g Nájde všetky zhody namiesto zastavenia pri prvej
    i Ignoruje rozdiel medzi veľkými a malými písmenami
    m ^ a $ zodpovedajú začiatku a koncu každého riadka
    s . zodpovedá aj zalomeniu riadka
    u Úplný režim Unicode: \u{…}, \p{…} a emoji sa spracúvajú ako jednotlivé znaky
    y Sticky: každá zhoda musí začínať presne tam, kde skončila predchádzajúca

    Katastrofálne spätné prehľadávanie

    Niektoré vzory trvajú exponenciálne dlho na texte, ktorý takmer vyhovuje. Klasickým príkladom je (a+)+$ otestované na dlhom rade a nasledovanom b: engine vyskúša každý spôsob rozdelenia a medzi dva kvantifikátory, než to vzdá. Tento problém, známy ako ReDoS, už zhodil skutočné webové stránky.

    Tento nástroj chráni tvoj prehliadač tromi spôsobmi. Hľadanie zhôd beží v pracovnom vlákne na pozadí, ktoré sa po 1,5 sekunde zastaví; testovací text je obmedzený na 100 000 znakov; a vysvetlenie ťa upozorní, keď opakovaná skupina obsahuje ďalší neohraničený kvantifikátor. Ak vzor prekročí časový limit, prepíš ho tak, aby sa každý znak dal zachytiť len jedným spôsobom, napríklad a+$ namiesto (a+)+$.

    Často kladené otázky

    Akú variantu regex tento nástroj používa?

    Používa engine JavaScriptu (ECMAScript) tvojho prehliadača, presne ako new RegExp() a String.prototype.replace() vo tvojom kóde. Väčšina syntaxe je spoločná s PCRE, Pythonom a Javou, ale niektoré funkcie sa líšia: privlastňovacie kvantifikátory a atómové skupiny v JavaScripte neexistujú a lookbehind podporujú všetky súčasné prehliadače.

    Prečo môj vzor nájde len jednu zhodu?

    Príznak g je vypnutý. Bez neho sa JavaScript zastaví po prvej zhode a nahradenie zmení len ju.

    Ako zachytím doslovnú bodku, zátvorku alebo otáznik?

    Escapuj ich spätným lomítkom: \., \[, \?. Vysvetlenie zobrazuje escapované znaky ako „(escapovaný)“, takže si to môžeš overiť.

    Odosiela sa môj text niekam?

    Nie. Vzor aj text sa spracúvajú iba v tvojom prehliadači, vďaka čomu je tento nástroj bezpečný pre súbory protokolov alebo údaje obsahujúce osobné informácie.

    Prečo sa pozícia líši od stĺpca v mojom editore?

    Pozície počítajú znaky od 0 cez všetky riadky, tak ako match.index v JavaScripte. Zalomenie riadka sa počíta ako jeden znak a emoji mimo základnej viacjazyčnej roviny sa počíta ako dva.