Jak Testować Wyrażenie Regularne Online (Z Prawdziwymi Przykładami)
Żeby przetestować wyrażenie regularne, zapisz wzorzec między ukośnikami / /, wybierz odpowiednie flagi, uruchom go na przykładowym tekście i sprawdź dwie rzeczy naraz: podświetlone dopasowania oraz zawartość grup przechwytujących. Dopiero gdy oba wyglądają poprawnie na kilku różnych przykładach, w tym na tych, które MAJĄ zostać odrzucone, wzorzec nadaje się do wklejenia do kodu.
Z czego składa się wzorzec i co robią flagi
Wzorzec regex zapisuje się między dwoma ukośnikami, na przykład /\d{3}-\d{4}/, a to, co jest poza ukośnikami, to flagi modyfikujące sposób dopasowania. W naszym testerze dostępne są dokładnie cztery:
- g (global) - znajduje wszystkie dopasowania w tekście, nie tylko pierwsze. Bez tej flagi silnik regex zatrzymuje się po trafieniu na pierwsze dopasowanie i ignoruje resztę tekstu.
- i (ignore case) - dopasowanie bez rozróżniania wielkości liter, więc
/hello/izłapie zarównoHello, jak iHELLO. - m (multiline) - sprawia, że
^i$dopasowują początek i koniec KAŻDEJ linii, a nie tylko początek i koniec całego tekstu. Bez tej flagi^i$odnoszą się do całego ciągu znaków, niezależnie od tego, ile linii zawiera. - s (dotAll) - rozszerza znaczenie kropki
., żeby dopasowywała też znaki nowej linii. Domyślnie kropka dopasowuje dowolny znak OPRÓCZ znaku nowej linii.
Do tego dochodzą grupy przechwytujące. Nawiasy () wydzielają fragment dopasowania, który można odczytać osobno, na przykład numer kierunkowy z pełnego numeru telefonu. Jeśli grup jest kilka, łatwo pogubić się w numeracji, dlatego regex wspiera też grupy nazwane, w rodzaju (?<year>\d{4}), gdzie zamiast indeksu odczytujesz wynik po nazwie year.
Przykłady, które warto przetestować
Poniższa tabela pokazuje cztery wzorce, które faktycznie pojawiają się w prawdziwym kodzie: walidację e-maila, wyciąganie kolorów HEX, parsowanie ścieżki REST i sprawdzanie formatu daty.
| Wzorzec | Flagi | Dopasowuje | Nie dopasowuje | Przechwytuje |
|---|---|---|---|---|
^[\w.+-]+@[\w-]+\.[a-zA-Z]{2,}$ | brak | jane.doe@example.com | jane@example (brak domeny najwyższego poziomu) | brak |
#([0-9a-fA-F]{6}|[0-9a-fA-F]{3}) | g | #2F7BFF, #fff | #12G456 (G nie jest cyfrą szesnastkową) | Grupa 1: 2F7BFF |
\/(\w+)\/(\w[\w-]*) | g | /users/123, /products/abc-456 | /users (brak drugiego segmentu) | Grupa 1: typ zasobu, Grupa 2: identyfikator |
^\d{4}-\d{2}-\d{2}$ | brak | 2026-07-11 | 07/11/2026 (zły format) | brak |
Ścieżka REST: \/(\w+)\/(\w[\w-]*) z flagą g
Ten wzorzec czyta się od lewej: \/ to dosłowny ukośnik, oescapowany, bo w regexie znak / bez ukośnika wstecznego kończyłby wzorzec. Zaraz po nim (\w+) to pierwsza grupa, jedno lub więcej znaków słowa (litery, cyfry, podkreślenie), która w praktyce łapie nazwę zasobu, czyli users albo products. Potem znowu \/, a na końcu (\w[\w-]*), druga grupa: musi zaczynać się od znaku słowa, ale dalej może zawierać też myślniki, co pozwala dopasować identyfikatory w rodzaju abc-456, a nie tylko czyste liczby.
Flaga g robi tutaj konkretną robotę: bez niej, uruchamiając ten wzorzec na całej ścieżce /products/abc-456/reviews/9, dostałbyś tylko pierwsze trafienie, /products/abc-456, i regex zatrzymałby się, mimo że w tekście jest drugie pasujące miejsce, /reviews/9. Z flagą g silnik przechodzi cały ciąg i zwraca oba dopasowania osobno, każde z własną parą grup. To dokładnie ten mechanizm, na którym buduje się prosty walidator tras w routerze: iterujesz po wszystkich segmentach /typ/id, sprawdzasz Grupę 1 pod kątem znanych typów zasobów (users, products, orders), a Grupę 2 przekazujesz dalej jako identyfikator do warstwy danych, bez ręcznego dzielenia stringa po ukośnikach i liczenia indeksów.
Kolory HEX: #([0-9a-fA-F]{6}|[0-9a-fA-F]{3}) z flagą g
Znak # na początku jest dosłowny, żadnego escapowania nie trzeba, bo # nie ma specjalnego znaczenia w regexie. Nawias otwiera jedną grupę z alternatywą w środku: [0-9a-fA-F]{6} dopasuje sześć znaków szesnastkowych pod rząd (format pełny, #2F7BFF), a [0-9a-fA-F]{3} dopasuje trzy (format skrócony, #fff). Silnik regex próbuje najpierw pierwszą alternatywę, a jeśli nie znajdzie sześciu pasujących znaków, cofa się i próbuje drugą. Wejście #12G456 odpada na obu wariantach, bo G nie jest cyfrą szesnastkową ani w zakresie 0-9, ani w a-f/A-F.
Wyobraź sobie plik CSS z dziesiątkami zdefiniowanych zmiennych kolorów, --color-accent: #2F7BFF;, --color-bg-dark: #0B1220;, i tak dalej. Bez flagi g dostałbyś tylko pierwszy kolor z całego pliku, co jest bezużyteczne, jeśli chcesz zbudować listę palety marki. Z flagą g regex zwraca każde dopasowanie po kolei, a Grupa 1 w każdym z nich to sam kod koloru, bez znaku #, gotowy do wrzucenia wprost do tablicy albo do generatora palety. To ten sam wzorzec, który dobrze sprawdza się jako pierwszy krok w skrypcie wyciągającym wszystkie kolory z arkusza stylów, zanim jeszcze dotkniesz właściwej logiki przetwarzania.
Wypróbuj sam
Wklej własny wzorzec i tekst testowy poniżej, żeby zobaczyć dopasowania i grupy na żywo, bez odświeżania strony.
Częste błędy i przypadki brzegowe
Zapomnienie flagi g. Bez niej regex zatrzymuje się po pierwszym dopasowaniu, co po cichu psuje wszystko, co oczekuje wszystkich wystąpień w tekście, na przykład operację „zamień wszystko” albo listę wszystkich adresów e-mail w dokumencie. Kod wygląda na działający podczas testu z jednym przykładem, a potem po cichu gubi dane w produkcji, gdy tekst zawiera więcej niż jedno trafienie.
Nieoescapowana kropka. Nieoescapowana . dopasowuje DOWOLNY znak, a nie dosłowną kropkę. Wzorzec 192.168.1.1 bez escapowania dopasuje też ciąg 192X168X1X1, bo każda kropka w takim zapisie znaczy „jakikolwiek znak”, nie „ten konkretny znak”. Żeby dopasować dosłowną kropkę, trzeba ją oescapować jako \., co zawęża dopasowanie z powrotem do samego znaku kropki.
Kwantyfikatory zachłanne kontra leniwe. .* pobiera jak najwięcej znaków (zachłanny), co może wykroczyć daleko poza zamierzony punkt zatrzymania. Klasyczny przykład to próba dopasowania jednego znacznika HTML wzorcem <.*>: zamiast zatrzymać się na pierwszym >, zachłanny kwantyfikator poleci aż do OSTATNIEGO > w całym bloku tekstu, obejmując po drodze wszystkie znaczniki pomiędzy. .*? (leniwy) zatrzymuje się w najwcześniejszym możliwym miejscu, czyli przy pierwszym napotkanym >, co zwykle jest tym, o co chodziło od początku.
Brak kotwic. Bez ^ i $ wzorzec może dopasować się jako PODCIĄG w dowolnym miejscu tekstu, więc wzorzec „walidacji” bez kotwic może przepuścić ciąg, który jedynie ZAWIERA poprawną część, przepuszczając nieprawidłowe dane wejściowe. Na przykład wzorzec daty bez kotwic dopasuje 2026-07-11 nawet wewnątrz x2026-07-11-nieprawidlowy, bo szuka fragmentu pasującego gdziekolwiek, a nie całego ciągu. ^ i $ wymuszają dopasowanie od pierwszego do ostatniego znaku, bez żadnych dodatkowych śmieci przed czy po.
Najczęściej zadawane pytania
Jaka jest rzeczywista różnica między użyciem flagi g a jej pominięciem? Bez flagi g silnik regex znajduje pierwsze dopasowanie i przestaje szukać, nawet jeśli w tekście są kolejne pasujące fragmenty. Z flagą g przechodzi cały tekst od początku do końca i zwraca każde dopasowanie osobno, razem z własnym zestawem grup. Jeśli zależy ci wyłącznie na sprawdzeniu, czy tekst spełnia jakiś format (walidacja pojedynczej wartości), flaga g zwykle jest zbędna. Jeśli chcesz wyciągnąć albo zamienić wszystkie wystąpienia w dłuższym tekście, jest obowiązkowa.
Jak dopasować dosłowny znak specjalny, taki jak kropka, znak dolara lub nawias?
Poprzedź go ukośnikiem wstecznym: \. dla kropki, \$ dla znaku dolara, \( i \) dla nawiasów. Regex traktuje te znaki jako specjalne, bo mają własne znaczenie w składni wzorca (kropka to „dowolny znak”, $ to „koniec tekstu”, nawiasy otwierają grupę), więc bez ukośnika wstecznego silnik czyta je jako instrukcję, nie jako zwykły znak do dopasowania.
Czym jest grupa nieprzechwytująca, (?:...), i kiedy potrzebuję jej zamiast zwykłej grupy (...)?
Grupa nieprzechwytująca grupuje część wzorca, na przykład do zastosowania kwantyfikatora na kilku znakach naraz, ale nie zapisuje dopasowanej wartości na liście przechwyconych grup. Przydaje się, gdy potrzebujesz grupowania wyłącznie ze względów strukturalnych, na przykład (?:https?|ftp):\/\/, żeby alternatywa http lub https lub ftp działała jako jedna jednostka przed resztą wzorca, ale nie chcesz, żeby ten fragment zaśmiecał wynikowe grupy, kiedy tak naprawdę interesuje cię tylko reszta dopasowania, jak domena czy ścieżka.
Czy to narzędzie wysyła mój wzorzec lub tekst testowy gdziekolwiek? Nie. Cała walidacja działa lokalnie w przeglądarce dzięki natywnemu silnikowi JavaScript RegExp, wbudowanemu w każdą przeglądarkę. Ani wzorzec, ani tekst testowy nie są wysyłane na żaden serwer, więc możesz bezpiecznie testować wyrażenia zawierające dane wrażliwe, na przykład fragmenty rzeczywistych numerów telefonów czy adresów e-mail z bazy produkcyjnej.