Utilia

Tester wyrażeń regularnych

Testuj wyrażenia regularne JavaScript na żywo z podświetlaniem dopasowań, grupami przechwytującymi, zamianą tekstu i objaśnieniem każdego elementu wzorca.

Flagi

Dopasowania
#PozycjaDopasowanieGrupy

Objaśnienie wzorca

    Jak korzystać z testera wyrażeń regularnych

    1. Wpisz wzorzec w pole Wyrażenie regularne, bez otaczających ukośników. Ukośniki i aktywne flagi są wyświetlane wokół pola, jak w /wzorzec/g.
    2. Zaznacz potrzebne Flagi: g (global), i (ignoruj wielkość liter), m (multiline), s (dotAll), u (unicode) lub y (sticky).
    3. Wklej tekst do przeszukania w pole Tekst testowy. Dopasowania są podświetlane na bieżąco, a tabela pokazuje każde z nich z pozycją i grupami przechwytującymi.
    4. Aby wypróbować zamianę, wypełnij pole Zamiana. Okno Wynik po zamianie pokazuje tekst z podmienionymi dopasowaniami, gotowy do skopiowania.
    5. Przeczytaj Objaśnienie wzorca, aby sprawdzić, co robi każda część twojego wyrażenia. Nie wiesz, od czego zacząć? Kliknij Wczytaj przykład.

    Co pokazuje tester

    • Podświetlone dopasowania: każde dopasowanie w tekście testowym jest zaznaczone, więc od razu widać, co zostało złapane, a co pominięte.
    • Tabela dopasowań: numer każdego dopasowania, jego pozycja (przesunięcie od początku tekstu liczone od 0), dopasowany tekst i wartość każdej grupy przechwytującej. Grupy nazwane, np. (?<year>\d{4}), pojawiają się pod swoją nazwą, a grupy, które nie wzięły udziału w dopasowaniu, mają oznaczenie „(niedopasowana)”. Wyświetlanych jest pierwszych 1000 dopasowań.
    • Zamiana: tekst zamiany używa składni JavaScriptu: $1 lub $2 dla grup numerowanych, $<name> dla grup nazwanych, $& dla całego dopasowania i $$ dla dosłownego znaku dolara. Bez flagi g zamieniane jest tylko pierwsze dopasowanie.
    • Objaśnienie: wzorzec jest dzielony na elementy (dosłowny tekst, klasy znaków, kotwice, grupy, kwantyfikatory, asercje lookaround, odwołania wsteczne), każdy z krótkim opisem. Zagnieżdżone grupy mają wcięcie, co bardzo ułatwia przegląd długich wzorców.

    Flagi w skrócie

    Flaga Działanie
    g Znajduje wszystkie dopasowania, zamiast zatrzymać się na pierwszym
    i Ignoruje różnicę między wielkimi a małymi literami
    m ^ i $ pasują na początku i końcu każdej linii
    s . pasuje także do znaku końca linii
    u Pełny tryb Unicode: \u{…}, \p{…} i emoji traktowane jako pojedyncze znaki
    y Sticky: każde dopasowanie musi zaczynać się dokładnie tam, gdzie skończyło się poprzednie

    Przy polskim tekście pamiętaj, że \w w JavaScripcie obejmuje tylko litery ASCII: „ą”, „ł” czy „ż” nie są znakami słowa. Aby dopasować dowolne litery, użyj flagi u i \p{L}.

    Katastrofalny backtracking

    Niektóre wzorce działają w czasie wykładniczym na tekście, który prawie pasuje. Klasyczny przykład to (a+)+$ testowane na długim ciągu liter a zakończonym b: silnik próbuje każdego sposobu podziału liter a między dwa kwantyfikatory, zanim się podda. Ten problem, znany jako ReDoS, kładł już prawdziwe serwisy.

    Narzędzie chroni twoją przeglądarkę na trzy sposoby. Dopasowywanie działa w wątku w tle (workerze), który jest zatrzymywany po 1,5 sekundy; tekst testowy jest ograniczony do 100 000 znaków; a objaśnienie ostrzega, gdy powtarzana grupa zawiera inny nieograniczony kwantyfikator. Jeśli wzorzec przekroczy limit czasu, przepisz go tak, aby każdy znak dało się dopasować tylko na jeden sposób, np. a+$ zamiast (a+)+$.

    Najczęściej zadawane pytania

    Jakiej odmiany regex używa to narzędzie?

    Silnika JavaScriptu (ECMAScript) w twojej przeglądarce, dokładnie tak, jak działałyby new RegExp() i String.prototype.replace() w twoim kodzie. Większość składni jest wspólna z PCRE, Pythonem i Javą, ale niektóre funkcje się różnią: kwantyfikatory zaborcze i grupy atomowe w JavaScripcie nie istnieją, a lookbehind obsługują wszystkie aktualne przeglądarki.

    Dlaczego mój wzorzec znajduje tylko jedno dopasowanie?

    Flaga g jest wyłączona. Bez niej JavaScript zatrzymuje się po pierwszym dopasowaniu i tylko ono zostaje zamienione.

    Jak dopasować dosłowną kropkę, nawias lub znak zapytania?

    Poprzedź go ukośnikiem wstecznym: \., \[, \?. Objaśnienie oznacza takie znaki dopiskiem „(poprzedzony ukośnikiem)”, więc łatwo to sprawdzić.

    Czy mój tekst jest gdzieś wysyłany?

    Nie. Wzorzec i tekst są przetwarzane wyłącznie w twojej przeglądarce, więc narzędzie nadaje się też do plików logów czy danych zawierających dane osobowe.

    Dlaczego pozycja różni się od kolumny w moim edytorze?

    Pozycje liczą znaki od 0, przez wszystkie linie, tak jak match.index w JavaScripcie. Znak końca linii liczy się jako jeden znak, a emoji spoza podstawowej płaszczyzny Unicode (BMP) – jako dwa.