Encoders & Utilities

Tester regex

Testuj regex JavaScript z podświetlaniem dopasowań, grupami i podglądem replace.

g (global), i (case-insensitive), m (multiline), s (dotall), u (unicode), y (sticky)

Quick reference

\d Digit (0–9)
\w Word char (a-z, 0-9, _)
\s Whitespace
[^abc] Anything except a/b/c
^/$ Start / end of line (with m flag)
a* Zero or more
a+ One or more
a? Zero or one
a{n,m} Between n and m repetitions
(?<name>…) Named capture group
(?=…) Lookahead
(?<=…) Lookbehind

O tym narzędziu

Regex Tester ewaluuje wyrażenia regularne JavaScript wobec ciała tekstu testowego i podświetla każde dopasowanie w miejscu. Pole wzorca akceptuje pełną składnię regex ECMAScript — kotwice, klasy znaków, alternację, lookahead, lookbehind, nazwane grupy chwytające, escape'y właściwości Unicode — z osobnymi togglami dla standardowych flag (g global, i ignore case, m multiline, s dot-matches-newline, u Unicode, y sticky). Dopasowania są kolorowane, a grupy chwytające są listowane pod podświetleniem dla każdego z nich.

Poza dopasowaniem narzędzie może uruchomić preview replace obok oryginału — wpisz string zastępujący (z backreferencjami $1 / $<name>) i zobacz dokładnie, co Twój regex wyprodukuje wobec testowego inputu. Każda operacja działa w Twojej przeglądarce z natywnym silnikiem RegExp, więc to, co debugujesz tu, jest dokładnie tym, co wykonuje się w produkcyjnym JavaScript (Node, Bun, Deno, każda przeglądarka).

Kiedy używać tego narzędzia

  • Budowanie walidatorów inputu. Wzorce e-mail, numerów telefonu, kodów pocztowych — projektuj i weryfikuj na realistycznych danych testowych przed wciśnięciem do kodu.
  • Parsowanie plików logów. Iteruj wzorzec multi-group capture wobec prawdziwych linii logu, aż każde pole wyjdzie czysto.
  • Edycja masowa. Testuj wzorzec find/replace przed uruchomieniem go na setkach plików w edytorze.
  • Nauka regex. Podświetlone dopasowania plus natychmiastowy feedback to najszybszy sposób na internalizację look-around, kotwic i backreferencji.

O wariantach regex

To narzędzie używa regex JavaScript (ECMAScript 2018+). PCRE, Python, .NET, Go i Java wszystkie różnią się nieco — PCRE wspiera wzorce rekurencyjne, których JavaScript nie ma, modułowi re Pythona brakuje lookbehind w niektórych wersjach, Go używa RE2, który całkowicie zabrania backreferencji. Jeśli celujesz w środowisko nie-JS, dwukrotnie sprawdź cechy specyficzne dla wariantu po stronie odbierającej. Dla czysto kompatybilnych z ECMAScript wzorców to narzędzie jest autorytatywne.

Najczęstsze pytania

Czym różnią się flagi g, m i s?

g (global) sprawia, że .match() i .replace() znajdują każde dopasowanie zamiast tylko pierwszego. m (multiline) sprawia, że ^ i $ pasują na łamaniach linii wewnątrz inputu, nie tylko na początku/końcu całego stringa. s (dotall) sprawia, że . pasuje też do nowych linii (domyślnym zachowaniem jest je pomijać). Są niezależne — łącz w zależności od potrzeb.

Dlaczego mój lookbehind nie działa?

Lookbehind (?<=...) wymaga nowoczesnego ECMAScript (2018+) i jest dostępny we wszystkich aktualnych evergreen browsers i Node 10+. Starsze runtime'y (IE 11, Safari przed 16.4, bardzo stary Node) odrzucają wzorzec przy kompilacji. Nasz tester używa silnika przeglądarki, więc jeśli Twój tester działa, ale target runtime zawodzi, target jest za stary. Workaround: przepisz bez lookbehind używając grupy niechwytającej i slice'a.

Jak testować przeciwko długiemu stringowi?

Wklej go do panelu test-text — nie ma cap-a długości poza tym, co przeglądarka może utrzymać. Dla plików wklej ich zawartość bezpośrednio. Podświetlone dopasowania pozostają zsynchronizowane przy scrollowaniu. Dla ekstremalnych inputów (megabajty tekstu plus katastroficznie backtrackujący regex) strona może na chwilę zamarznąć; jeśli tak się stanie, uprość regex lub podziel input.

Co to jest "catastrophic backtracking"?

Wzorzec, który zajmuje eksponencjalnie czasu na pewnych inputach — typowo zagnieżdżone kwantyfikatory jak (a+)+ wobec długiego stringa kończącego się non-match. Silnik regex próbuje każdej permutacji przed poddaniem się. Nowoczesne silniki JavaScript nie mają timeoutu, więc strona może zawisnąć. Naprawa: przepisz bez zagnieżdżonych kwantyfikatorów, użyj grup possessive przez (?:a+) lub zakotwicz wzorzec ściślej.