Jak używać: Tester regex
- Wpisz wzorzec między ukośnikami, bez otaczających
/. - Przełączaj flagi, takie jak
g (wszystkie dopasowania), i (bez rozróżniania wielkości liter) i m (wielowierszowy). - Wklej tekst testowy. Dopasowania są podświetlane po prawej i wypisywane poniżej z indeksem i grupami przechwytującymi.
- Zaznacz Zamień i wpisz zamiennik, np.
$1 lub $<name>, aby podejrzeć działanie String.replace. - Wybierz wzorzec z Biblioteki wzorców, aby zacząć od sprawdzonego regexa dla e-maila, URL, IP lub daty.
Wyrażenia regularne w JavaScript
Ten tester używa wbudowanego silnika RegExp Twojej przeglądarki, więc wyniki są dokładnie takie, jakie zwracają String.match, matchAll, replace i RegExp.exec w JavaScripcie i Node.js. Obejmuje to nowoczesną składnię: grupy nazwane (?<name>…), lookbehind (?<=…), klasy właściwości Unicode, takie jak \p{L} z flagą u, oraz indeksy dopasowań z flagą d.
Co robią flagi
| Flaga | Nazwa | Działanie |
g | global | Znajduje każde dopasowanie zamiast zatrzymać się na pierwszym. |
i | ignoreCase | Litery pasują bez względu na wielkość. |
m | multiline | ^ i $ pasują na początku i końcu każdej linii. |
s | dotAll | . pasuje także do znaków nowej linii. |
u | unicode | Traktuje wzorzec jako punkty kodowe; włącza \p{…} i \u{…}. |
y | sticky | Dopasowuje tylko na bieżącej pozycji lastIndex. |
d | hasIndices | Podaje pozycje początku i końca każdej grupy przechwytującej. |
Ochrona przed katastrofalnym backtrackingiem
Wzorce z zagnieżdżonymi kwantyfikatorami, np. (a+)+$ lub (\w|\d)*x, mogą działać w czasie wykładniczym na danych, które prawie pasują. Na zwykłej stronie zawiesza to kartę. Tutaj każde dopasowanie działa w tle w Web Workerze, który jest zatrzymywany po jednej sekundzie, a Ty dostajesz jasne ostrzeżenie zamiast zawieszonej przeglądarki. Ten sam wzorzec w kodzie produkcyjnym może być podatnością ReDoS, więc traktuj ostrzeżenie jako błąd do naprawienia.
Wskazówki do pisania lepszych regexów
- Kotwicz wzorce za pomocą
^ i $ przy walidacji całych wartości, inaczej przejdzie dopasowanie w dowolnym miejscu ciągu.
- Preferuj konkretne klasy, np.
[^"]*, zamiast .*; są szybsze i nie dopasowują za dużo.
- Używaj grup nieprzechwytujących
(?:…), gdy nie potrzebujesz przechwyconej wartości.
- Nazywaj grupy.
match.groups.year czyta się łatwiej niż match[1].
Najczęściej zadawane pytania
Jakiej odmiany regex używa ten tester?
JavaScript (ECMAScript), przez wbudowany w przeglądarkę RegExp. Większość składni jest wspólna z PCRE, Pythonem i Javą, ale funkcje takie jak kwantyfikatory zaborcze, grupy atomowe i modyfikatory inline, np. (?i), nie są dostępne w JavaScripcie.
Dlaczego mój wzorzec znajduje tylko jedno dopasowanie?
Bez flagi g (global) JavaScript zatrzymuje się po pierwszym dopasowaniu. Włącz g, aby znaleźć wszystkie wystąpienia.
Jak odwołać się do grup w zamianie?
Użyj $1, $2… dla grup numerowanych, $<name> dla grup nazwanych, $& dla całego dopasowania i $$ dla dosłownego znaku dolara.
Dlaczego tester zatrzymał się z przekroczeniem czasu?
Wzorzec działał na Twoich danych dłużej niż sekundę, co niemal zawsze oznacza katastrofalny backtracking. Poszukaj zagnieżdżonych kwantyfikatorów, np. (x+)+, lub nakładających się alternatyw, np. (a|a)*, i przepisz je tak, aby każdy znak mógł zostać dopasowany tylko na jeden sposób.
Czy moje dane testowe są gdzieś wysyłane?
Nie. Dopasowywanie działa lokalnie w Web Workerze w przeglądarce. Wzorzec i tekst są zapisywane tylko w Twojej przeglądarce, aby czekały na Ciebie przy kolejnej wizycie.