Tester wyrażeń regularnych

Testuj wyrażenia regularne z wyróżnianiem dopasowań na żywo.

O tym narzędziu

Wpisz wyrażenie regularne JavaScript, przełączaj flagi i obserwuj wyróżnianie wszystkich dopasowań podczas pisania, razem z grupami przechwytującymi i podglądem zamiany.

Jak z tego korzystać

  1. Wpisz wyrażenie regularne w polu wzorca, bez otaczających ukośników.
  2. Przełączaj flagi: g – wszystkie dopasowania, i – ignorowanie wielkości liter, m – kotwice wielolinijkowe, s – . dopasowuje znaki nowej linii, u – Unicode.
  3. Wklej tekst testowy i zobacz wyróżnione wszystkie dopasowania, z grupami przechwytującymi wypisanymi poniżej.
  4. Włącz Zamień, aby zobaczyć podgląd podstawienia z użyciem $1, $2 lub $<name>.

Pytania

Jaki to wariant wyrażeń regularnych?
JavaScript (ECMAScript). W codziennych wzorcach jest bardzo zbliżony do PCRE i Pythona, ale obsługa lookbehind, składnia grup nazwanych i niektóre sekwencje ucieczki różnią się między językami.
Jak dopasować dosłowną kropkę lub nawias?
Poprzedź go ukośnikiem wstecznym: \. dopasowuje kropkę, \( nawias okrągły, \[ nawias kwadratowy. Wewnątrz klasy znaków, np. [.], większość znaków traci specjalne znaczenie.
Czym różni się .* od .*?
.* jest zachłanne i dopasowuje jak najwięcej; .*? jest leniwe i dopasowuje jak najmniej. Gdy wyciągasz tekst między dwoma znacznikami, zwykle potrzebujesz właśnie leniwego dopasowania.
Jak działają grupy nazwane?
Wpisz (?<name>...), aby przechwycić wartość do grupy nazwanej. Jej wartość jest widoczna w szczegółach dopasowania i możesz jej użyć w zamienniku jako $<name>.
Dlaczego mój regex dopasowuje pusty ciąg?
Wzorzec, w którym wszystko jest opcjonalne, taki jak a* albo (\d+)?, może dopasować zero znaków i robi to w każdej pozycji, w której nie pasuje nic dłuższego. Tabela Szczegóły dopasowania pokazuje takie dopasowania jako (puste). Użyj + zamiast * albo spraw, by przynajmniej jedna część wzorca była wymagana.
Jak użyć całego dopasowania w zamienniku?
Wpisz $& dla całego dopasowania, $1 i $2 dla grup numerowanych, $<name> dla grup nazwanych i $$ dla dosłownego znaku dolara. Na przykład zamiana \d+ na [$&] otacza każdą liczbę nawiasami kwadratowymi. Włącz flagę g, aby zamienić każde wystąpienie, a nie tylko pierwsze.
Czy regex może zawiesić przeglądarkę?
Tak. Zagnieżdżone kwantyfikatory, takie jak (a+)+ albo (\w+\s?)*$, mogą wykładniczo się cofać na tekście, który prawie pasuje – to tzw. katastrofalny backtracking. Dopasowywanie działa w karcie przeglądarki, więc strona może się zawiesić, dopóki jej nie zamkniesz. Przepisz wzorzec tak, by każdy znak dało się dopasować tylko na jeden sposób, na przykład a+ zamiast (a+)+.

Flagi regex: g, i, m, s i u – co oznaczają?

Flagi regex zmieniają działanie całego wzorca. g (global) znajduje każde dopasowanie, zamiast zatrzymać się na pierwszym. Bez niej ten tester podświetla tylko pierwsze dopasowanie, a Zamień zmienia tylko pierwsze wystąpienie, dokładnie jak String.replace w JavaScripcie. i ignoruje wielkość liter, więc /error/i dopasowuje Error i ERROR. m sprawia, że ^ i $ pasują na początku i końcu każdej linii, czego potrzebujesz, testując wzorzec na pliku logu.

Flaga s, zwana dotall, sprawia, że . dopasowuje także znaki nowej linii, więc <p>.*?</p> może objąć kilka linii. Flaga u włącza tryb Unicode: emoji i inne znaki spoza Basic Multilingual Plane liczą się jako jeden znak, dostępne stają się sekwencje właściwości Unicode, a nieznane sekwencje ucieczki, takie jak \- poza klasą znaków, stają się błędami, zamiast być po cichu akceptowane. Flagi sticky y ani flagi d dla indeksów dopasowań nie ma tu do wyboru.

Jak przetestować regex na prawdziwych danych?

Testuj wyrażenie regularne na realistycznych próbkach, a nie tylko na optymistycznym scenariuszu. Wklej tekst z wartościami, które powinny pasować, i takimi, które nie powinny, a potem obserwuj podświetlenie. Dla daty ISO zacznij od \d\d\d\d-\d\d-\d\d i sprawdź, czy 2026-11-08 się podświetla, a 2026-1-8 nie. Potem zauważ, że 12026-11-08 wciąż pasuje częściowo. Naprawią to granice słowa \b albo ^ i $ z flagą m.

Tabela Szczegóły dopasowania wypisuje każde dopasowanie z jego indeksem i grupami przechwytującymi, numerowanymi $1, $2 itd., a grupy nazwane pokazuje po nazwie – to najszybszy sposób, by sprawdzić, czy grupa przechwytuje to, czego oczekujesz. W przypadku adresów e-mail pogódź się z tym, że żaden praktyczny regex nie jest w pełni zgodny z RFC: wzorzec taki jak [\w.+-]+@[\w-]+\.[\w.-]+ wyłapuje literówki, a prawdziwą weryfikację zapewnia e-mail z potwierdzeniem. Aby rozłożyć URL na części, użyj narzędzia Kodowanie, dekodowanie i analiza URL.

Jak użyć przetestowanego regexa w JavaScripcie, Pythonie i grepie?

Wzorzec przetestowany tutaj możesz wstawić prosto do literału regex w JavaScripcie, takiego jak /\d+/g, bez dodatkowego escapowania. Gdy budujesz go z ciągu znaków, jak w new RegExp() albo w większości innych języków, każdy ukośnik wsteczny trzeba podwoić, więc \d+ w zwykłym literale tekstowym staje się "\\d+". Surowe ciągi w Pythonie, takie jak r"\d+", i ciągi w backtickach w Go pozwalają uniknąć podwajania. Zapomnienie o tym to najczęstszy powód, dla którego regex działa w testerze, ale nie w kodzie.

W innych językach flagi ustawia się w różnych miejscach. Python używa re.IGNORECASE albo wbudowanego (?i), a grep używa -i do ignorowania wielkości liter, natomiast -E lub -P wybiera składnię. Lookbehind też się różni: JavaScript pozwala na lookbehind o zmiennej długości, a moduł re w Pythonie wymaga stałej szerokości, więc (?<=\$|USD )\d+ tam nie zadziała. Kreator poleceń grep i ripgrep zamienia przetestowany wzorzec w gotowe do uruchomienia polecenie z objaśnieniem każdej flagi.

Coś nie działa albo wynik wygląda na błędny? Zgłoś problem z tym narzędziem