RevealTheme logo

Tester wyrażeń regularnych

Testuj wyrażenia regularne JavaScript względem dowolnych danych wejściowych. Obserwuj dopasowania, grupy i zamiany w czasie rzeczywistym.

0 dopasowanie(a)

Jak korzystać z tego narzędzia

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

Czym są wyrażenia regularne i jak się je odczytuje?

Wyrażenia regularne (regex) to niewielki język dziedzinowy służący do wyszukiwania wzorców w tekście. Każdy nowoczesny język programowania ma silnik regex; to narzędzie wykorzystuje natywny obiekt RegExp języka JavaScript, który jest zgodny ze specyfikacją ECMAScript 2018+ i obsługuje nowoczesne funkcje, takie jak asercje lookbehind, nazwane grupy przechwytujące, sekwencje ucieczki właściwości Unicode oraz flagę dotAll. Podstawowe elementy: znaki dosłowne dopasowują się same do siebie (regex 'kot' dopasowuje słowo kot); klasy znaków dopasowują dowolny znak z zestawu ('[a-z]' dopasowuje małe litery); kwantyfikatory kontrolują powtórzenia (* zero lub więcej, + jeden lub więcej, ? zero lub jeden, {3,5} od 3 do 5); kotwice dopasowują pozycje (^ początek ciągu, $ koniec, \b granica słowa); grupy przechwytują poddopasowania ((kot|pies) dopasowuje dowolny z nich, przechwytując który); alternacja daje wybór. Regex sprawdza się świetnie przy analizie tekstu o ustrukturyzowanej, ale niegramatycznej budowie (logi, adresy e-mail, numery telefonów, proste atrybuty HTML), a zawodzi przy strukturach prawdziwie rekurencyjnych (pełny HTML, zagnieżdżony JSON). W takich przypadkach użyj parsera. Ten tester pozwala iterować nad wzorcem z natychmiastową informacją zwrotną: zmień regex, a dopasowania zostaną przeliczone przy każdym naciśnięciu klawisza.

Typowe przypadki użycia

  • Waliduj format danych wprowadzanych przez użytkownika (adresy e-mail, numery telefonów, kody pocztowe) przed wysłaniem ich na serwer.

  • Wyodrębniaj dane strukturalne z plików logów (znaczniki czasu, adresy IP, kody statusu, ścieżki żądań).

  • Wykonuj operacje znajdź-i-zamień w setkach plików, korzystając z wyszukiwania wyrażeń regularnych w edytorze.

  • Pisz reguły przepisywania adresów URL dla Nginx, Apache .htaccess lub przekierowań Vercel.

  • Parsuj proste formaty przypominające CSV, gdzie prawdziwy parser byłby przesadą.

  • Twórz wzorce walidacji formularzy dla atrybutów HTML <input pattern="...">.

Najczęściej zadawane pytania

Jakie flagi są obsługiwane?
g (global: znajduje wszystkie dopasowania, nie tylko pierwsze), i (bez rozróżniania wielkości liter), m (multiline: ^ i $ dopasowują się do końców wierszy), s (dotAll: . dopasowuje znaki końca wiersza), u (unicode: poprawna obsługa znaków wielobajtowych), y (sticky: dopasowuje tylko na pozycji lastIndex). Łącz flagi, zapisując je obok siebie: 'gim' włącza global + bez rozróżniania wielkości liter + multiline.
Jak dopasować tekst w wielu wierszach?
Dwie odrębne potrzeby: 'm' sprawia, że ^ i $ dopasowują się do końców wierszy (traktuje każdy wiersz jako oddzielny ciąg dla kotwic). 's' sprawia, że . dopasowuje znaki końca wiersza (w przeciwnym razie . dopasowuje wszystko z wyjątkiem znaków końca wiersza). Użyj obu razem, jeśli potrzebujesz dopasować wzorce rozciągające się na wiele wierszy.
Jaka jest różnica między kwantyfikatorami zachłannymi a leniwymi?
Kwantyfikatory zachłanne (*, +, {n,m}) dopasowują jak najwięcej. Kwantyfikatory leniwe (*?, +?, {n,m}?) dopasowują jak najmniej. Klasyczny przykład: regex '<.*>' na '<a><b>' dopasowuje całe '<a><b>'; '<.*?>' dopasowuje tylko '<a>'.
Kiedy NIE powinienem używać regex?
Gdy struktura jest prawdziwie rekurencyjna (HTML, JSON, zbalansowane nawiasy). Gdy musisz poprawnie obsłużyć każdy przypadek brzegowy (analizowanie dat ze strefami czasowymi, nazwiska z apostrofami). Gdy gramatyka danych wejściowych jest dobrze zdefiniowana i istnieje biblioteka do parsowania. Słynna odpowiedź ze Stack Overflow: regex jest świetny do znajdowania wzorców, a fatalny do analizowania języków.
Czym są nazwane grupy przechwytujące?
Zamiast (\d{4})-(\d{2})-(\d{2}) zwracającego numerowane grupy, użyj (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) i odwołuj się do dopasowań jak match.groups.year. Znacznie łatwiejsze w utrzymaniu w prawdziwym kodzie.
Dlaczego mój regex jest wolny przy niektórych danych wejściowych?
Katastrofalny nawrót (catastrophic backtracking). Zagnieżdżone kwantyfikatory takie jak (a+)+ mogą zajmować czas wykładniczy przy złośliwie spreparowanych danych wejściowych. Unikaj zagnieżdżonych kwantyfikatorów i nakładających się alternacji. Silnik JavaScript nie ma limitu czasu, więc zły regex może zawiesić żądanie. Na potrzeby produkcji użyj pakietu npm safe-regex, aby wykrywać ryzykowne wzorce.
Czy działa to tak samo jak silnik regex na moim serwerze?
W większości tak: główne odmiany regex (PCRE, re w Pythonie, regex w Ruby, Java) są podobne, ale mają subtelne różnice. Składnia lookbehind, zachowanie klas znaków oraz obsługa Unicode różnią się między sobą. Aby uzyskać zgodność na produkcji, przetestuj to również w docelowym języku.

Powiązane narzędzia