Regex w JavaScript - Praktyczne przykłady i szybkie porady

What is RegEx?" z przykładem wyrażeń regularnych: `str.match(/\d+\.\d+|\d+|[-+*/\(\)]/g);`.

Napisano przez

Jacek Zając

Opublikowano

6 mar 2026

Spis treści

Wyrażenia regularne pomagają szybko sprawdzać format tekstu, wyciągać z niego konkretne fragmenty i porządkować dane bez ręcznego przepisywania długich warunków. W tym artykule pokazuję praktyczne przykłady regexów, które naprawdę przydają się w programowaniu webowym, oraz tłumaczę, jak czytać je bez zgadywania. Skupiam się na zastosowaniu, bo właśnie tam najłatwiej zobaczyć, kiedy taki wzorzec oszczędza czas, a kiedy lepiej użyć prostszej metody.

Najważniejsze rzeczy, które trzeba znać na start

  • Regex to wzorzec do dopasowywania tekstu, a nie osobny język programowania.
  • Najczęściej używa się kilku znaków: ., [], \d, *, +, ?, ^ i $.
  • W JavaScript test() sprawdza zgodność, match() pomaga wyciągać dane, a replace() czyści lub zmienia tekst.
  • Dobry wzorzec jest prosty i konkretny; nie próbuje rozwiązać wszystkiego naraz.
  • Przy polskich znakach i danych Unicode trzeba uważać, bo nie każdy skrót działa tak samo w każdym kontekście.

Jak działa dopasowanie wzorca w praktyce

Najprościej mówiąc, regex porównuje tekst z opisem tego, jak ten tekst ma wyglądać. Zamiast sprawdzać pojedyncze litery ręcznie, opisujesz regułę: „to ma być data”, „to ma być numer telefonu”, „to ma być slug URL” albo „to ma być fragment z cyframi pośrodku”. Właśnie dlatego wyrażenia regularne są tak użyteczne w formularzach, filtrach, logach i narzędziach do czyszczenia danych.

Ja zwykle dzielę zastosowania regexów na trzy grupy: walidację, wyszukiwanie i zamianę. Walidacja odpowiada na pytanie, czy cały ciąg pasuje do wzorca. Wyszukiwanie wyciąga tylko interesujący fragment z dłuższego tekstu. Zamiana pozwala usunąć znaki, ujednolicić zapis albo przerobić dane do innego formatu.

Ważne jest też to, że regex nie zawsze musi być pierwszym wyborem. Jeśli chcesz tylko sprawdzić, czy string zaczyna się od konkretnego prefiksu, często wystarczy startsWith(). Jeśli szukasz jednego, prostego fragmentu, includes() bywa czytelniejsze. Regex ma sens wtedy, gdy tekst ma strukturę, a nie tylko pojedynczą, stałą wartość. Z takiego podejścia najłatwiej przejść do znaków, które budują sam wzorzec.

What is RegEx?

Najważniejsze symbole, od których warto zacząć

Jeśli ktoś ma nauczyć się tylko kilku elementów na początek, ja zawsze stawiam na zestaw podstawowy. To właśnie on pojawia się w większości codziennych wzorców i daje największy efekt przy najmniejszym nakładzie nauki.

Symbol Co oznacza Przykład Kiedy się przydaje
. Dowolny znak poza zwykle znakiem nowej linii a.c Gdy chcesz dopuścić jeden „obcy” znak w środku wzorca
\d Cyfra \d{2} Przy datach, kodach, numerach i liczbach
\w Litera, cyfra lub znak podkreślenia \w+ Przy prostych identyfikatorach i nazwach technicznych
\s Biały znak \s+ Przy czyszczeniu odstępów i dzieleniu tekstu
[...] Jeden znak z podanego zbioru [abc] Gdy dopuszczasz tylko kilka konkretnych znaków
[^...] Jeden znak spoza zbioru [^0-9] Gdy chcesz wykluczyć określone znaki
* Zero lub więcej powtórzeń ab*c Gdy dany element może się nie pojawić albo pojawić wielokrotnie
+ Jedno lub więcej powtórzeń ab+c Gdy element ma wystąpić co najmniej raz
? Zero lub jedno wystąpienie colou?r Gdy dopuszczasz wariant opcjonalny
{n,m} Zakres powtórzeń \d{2,4} Gdy liczba znaków musi mieścić się w konkretnym przedziale
^ i $ Początek i koniec tekstu ^\d+$ Gdy chcesz dopasować cały string, a nie tylko jego fragment
(...) Grupa przechwytywania (\d{2})-(\d{2})-(\d{4}) Gdy chcesz później odczytać część dopasowania
| Alternatywa cat|dog Gdy akceptujesz jedną z kilku opcji

Jeśli pracujesz z tekstem po polsku, jedna rzecz potrafi zaskoczyć: skróty typu \w i \b nie zawsze są wystarczające do pełnej obsługi Unicode. W nowoczesnym JavaScript często lepiej sprawdzają się klasy Unicode, na przykład \p{L} z flagą u, gdy chcesz dopasować litery także z diakrytykami. To drobiazg, ale w praktyce robi dużą różnicę przy nazwach, tytułach i danych użytkowników. Gdy już masz te symbole pod ręką, najłatwiej przejść do wzorców, które można od razu wkleić do projektu.

Przykłady, które najczęściej przydają się w projektach

To jest ta część, po którą większość osób sięga najczęściej. Nie chodzi o teorię, tylko o wzorce, które można wykorzystać w formularzu, skrypcie czyszczącym dane albo filtrze wyszukiwania. Poniżej pokazuję przykłady z krótkim komentarzem, bo sam regex bez kontekstu bywa mylący.

Zadanie Wzorzec Co dopasowuje Uwaga praktyczna
Data w formacie dd-mm-rrrr ^\d{2}-\d{2}-\d{4}$ Na przykład 12-06-2026 Dobry do prostego sprawdzania formatu, ale nie zweryfikuje czy dzień naprawdę istnieje
Slug URL ^[a-z0-9]+(?:-[a-z0-9]+)*$ Na przykład kurs-javascript-podstawy Przyjazny zapis bez spacji i wielkich liter
Polski numer telefonu w uproszczeniu ^(?:\+48[\s-]?)?\d{3}[\s-]?\d{3}[\s-]?\d{3}$ Na przykład +48 123 456 789 Działa dobrze jako lekka walidacja, ale nie pokrywa wszystkich możliwych zapisów
Adres e-mail w uproszczeniu ^[^\s@]+@[^\s@]+\.[^\s@]+$ Na przykład ala@example.pl To nie jest pełna walidacja e-maila, tylko praktyczny filtr na oczywiste błędy
Same cyfry ^\d+$ Na przykład 123456 Przydaje się przy kodach, ID i prostych liczbach wpisywanych przez użytkownika
Słowo z liter Unicode ^\p{L}+$ z flagą u Na przykład Łódź Dobre rozwiązanie, gdy chcesz uwzględnić także polskie znaki
Usunięcie nadmiarowych spacji \s+ Wszystkie ciągi białych znaków Świetne do zamiany wielu odstępów na jeden znak albo do czyszczenia treści

Wzorce z tej tabeli nie są „magiczne” i właśnie dlatego są dobre. Każdy z nich rozwiązuje konkretny problem, a nie próbuje udawać uniwersalnego walidatora wszystkiego. Jeśli mam wskazać jedną zasadę, która oszczędza najwięcej czasu, to brzmi ona tak: zawsze testuj regex na prawdziwych danych, nie tylko na idealnym przykładzie. Następny krok to sprawdzenie, jak te wzorce zachowują się w kodzie JavaScript.

Jak testować regex w JavaScript bez zgadywania

W JavaScript najczęściej zaczynam od literału, czyli zapisu w formie /.... Gdy wzorzec ma być dynamiczny, używam konstruktora new RegExp(). To ważne, bo przy konstruktorze trzeba pamiętać o podwójnym escapowaniu znaków specjalnych wewnątrz stringa.

const datePattern = /^\d{2}-\d{2}-\d{4}$/;
console.log(datePattern.test("12-06-2026")); // true
console.log(datePattern.test("12/06/2026")); // false

const phonePattern = new RegExp("^\\+48[\\s-]?\\d{3}[\\s-]?\\d{3}[\\s-]?\\d{3}$");
console.log(phonePattern.test("+48 123 456 789")); // true

Jeśli chcę tylko odpowiedzi „tak” albo „nie”, wybieram test(). To najczytelniejsza opcja przy walidacji formularza. Gdy potrzebuję samego dopasowania albo fragmentów przechwyconych w grupach, sięgam po match() albo exec(). W praktyce różnica ma znaczenie, bo te metody nie zwracają tego samego.

Metoda Co zwraca Najlepsze zastosowanie
test() true lub false Szybka walidacja i sprawdzenie, czy wzorzec pasuje
match() Tablicę dopasowań albo null Wyciąganie pierwszego dopasowania lub wielu wyników
exec() Tablicę z dopasowaniem i grupami przechwytywania Gdy potrzebujesz szczegółów konkretnego dopasowania
replace() Nowy string Czyszczenie tekstu, normalizacja i zamiana fragmentów
split() Tablicę fragmentów Dzielenie tekstu po separatorach opisanych regexem
const text = "Kod produktu: AB-4821";
const result = text.match(/([A-Z]{2})-(\d{4})/);

if (result) {
  console.log(result[1]); // AB
  console.log(result[2]); // 4821
}

const cleaned = "  Ala    ma   kota  ".replace(/\s+/g, " ").trim();
console.log(cleaned); // "Ala ma kota"

W tym przykładzie widać dwie rzeczy, które w praktyce robią największą różnicę. Po pierwsze, grupy przechwytywania pozwalają wydobyć z tekstu dokładnie to, co potrzebne. Po drugie, flaga g przydaje się wtedy, gdy chcesz zamienić lub znaleźć wszystkie wystąpienia, a nie tylko pierwsze. Skoro wiadomo już, jak tego używać, warto zobaczyć, gdzie początkujący najczęściej wpadają w pułapkę.

Najczęstsze błędy, które psują dopasowanie

Regexy są krótkie, ale przez to łatwo ukryć w nich błąd, którego nie widać na pierwszy rzut oka. Ja najczęściej widzę te same problemy: wzorzec jest zbyt szeroki, za mało precyzyjny albo testowany tylko na jednym przykładzie.

  • Brak kotwic ^ i $ sprawia, że wzorzec dopasowuje fragment, choć miał sprawdzać cały string. To częsty błąd przy walidacji loginów, kodów i dat.
  • Zbyt dużo .* daje wynik, który „łyka” prawie wszystko. To wygodne, ale szybko robi się nieczytelne i trudne do kontrolowania.
  • Zapomniane escapowanie znaków specjalnych psuje dopasowanie kropki, nawiasów, plusa czy pytajnika. Jeśli znak ma znaczenie w regexie, a ma być literalny, trzeba go uciec.
  • Mylenie match() z flagą g prowadzi do zaskoczeń, bo przy globalnym dopasowaniu grupy przechwytywania nie zachowują się tak, jak wielu osobom się wydaje.
  • Traktowanie regexu jak parsera HTML lub JSON to zły kierunek. Wzorzec może pomóc przy prostym filtrowaniu, ale nie zastąpi narzędzia do właściwego parsowania struktury.
  • Ignorowanie Unicode i polskich znaków powoduje błędy przy nazwach, opisach i danych użytkowników. W projektach dla polskiego rynku to nie jest detal, tylko realny warunek poprawnego działania.

Dobry nawyk jest prosty: zanim uznasz wzorzec za gotowy, sprawdź go na kilku wersjach danych, także błędnych. W praktyce testuję zawsze przypadki graniczne, bo właśnie one pokazują, czy regex jest naprawdę użyteczny, czy tylko wygląda dobrze w edytorze. Z tego punktu już blisko do ostatniej rzeczy, która odróżnia wzorzec pomocny od wzorca, który za pół roku nikt nie będzie chciał dotykać.

Jak pisać wzorce, które da się utrzymać po miesiącu

Najlepszy regex to nie ten najbardziej efektowny, tylko ten, który da się zrozumieć po czasie. W projektach webowych wracam do tej zasady bardzo często, bo wzorce zwykle żyją dłużej niż pojedynczy komponent czy formularz.

  • Zaczynaj od najprostszej wersji wzorca i dopiero potem dodawaj kolejne warunki.
  • Testuj na prawdziwych przykładach wejścia, a nie tylko na jednym „ładnym” stringu.
  • Jeśli wzorzec robi się długi, dodaj komentarz albo rozbij go na czytelne fragmenty.
  • Nie waliduj regexem tego, co lepiej sprawdzi zwykła logika aplikacji lub parser.
  • Przy danych użytkownika pamiętaj o Unicode, bo polskie litery i znaki diakrytyczne potrafią zmienić wynik.
  • Jeśli regex ma być używany wielokrotnie, trzymaj go w jednym miejscu, zamiast kopiować identyczny zapis w kilku plikach.

Na start wystarczy kilka dobrze opanowanych symboli, pięć czy sześć praktycznych wzorców i nawyk testowania ich na realnych danych. Reszta przychodzi naturalnie, gdy zaczynasz widzieć w tekście strukturę, a nie tylko ciąg znaków. Właśnie wtedy regex przestaje być tajemniczym skrótem, a staje się normalnym narzędziem pracy, które naprawdę pomaga w kodzie.

FAQ - Najczęstsze pytania

Regex to wzorce służące do dopasowywania, wyszukiwania i manipulowania tekstem. Pozwalają opisywać, jak tekst ma wyglądać, zamiast sprawdzać go znak po znaku. Są potężnym narzędziem do walidacji danych, wyciągania informacji i czyszczenia ciągów znaków.

Regex jest idealny, gdy tekst ma złożoną strukturę (np. daty, numery telefonów, adresy e-mail). Do prostych zadań, jak sprawdzenie prefiksu czy obecności słowa, często wystarczą metody takie jak `startsWith()` czy `includes()`, które są czytelniejsze i szybsze.

Warto znać `.`, `\d`, `\w`, `\s`, `[]`, `*`, `+`, `?`, `{}`, `^`, `$`, `()` i `|`. Te symbole pokrywają większość codziennych zastosowań i pozwalają budować skuteczne wzorce do walidacji i ekstrakcji danych.

W JavaScript do testowania regex używa się metod takich jak `test()` (sprawdza dopasowanie), `match()` (zwraca dopasowania), `exec()` (zwraca dopasowania z grupami) oraz `replace()` (zamienia tekst). Pamiętaj o flagach, np. `g` dla globalnego dopasowania i `u` dla Unicode.

Częste błędy to brak kotwic `^` i `$` (dopasowanie fragmentu zamiast całości), zbyt szerokie `.*`, zapominanie o escapowaniu znaków specjalnych, ignorowanie Unicode oraz używanie regex do parsowania złożonych struktur jak HTML czy JSON.

Oceń artykuł

Ocena: 0.00 Liczba głosów: 0

Tagi:

wyrażenia regularne przykłady wyrażenia regularne w javascript przykłady regex javascript praktyczne zastosowania jak używać regex w js

Udostępnij artykuł

Jacek Zając

Jacek Zając

Nazywam się Jacek Zając i od dziewięciu lat zajmuję się programowaniem webowym. Moja przygoda z tą dziedziną zaczęła się od fascynacji tworzeniem stron internetowych, co szybko przerodziło się w pasję do nauczania innych. Lubię dzielić się wiedzą i pomagać osobom, które stawiają pierwsze kroki w programowaniu. Skupiam się na wyjaśnianiu złożonych zagadnień w przystępny sposób, aby każdy mógł zrozumieć podstawy i rozwijać swoje umiejętności. W moich artykułach poruszam różnorodne tematy związane z programowaniem webowym, od HTML i CSS po JavaScript i frameworki. Dokładam wszelkich starań, aby informacje, które prezentuję, były rzetelne, aktualne i łatwe do przyswojenia. Regularnie śledzę nowinki w branży, co pozwala mi na dostarczanie czytelnikom treści zgodnych z najnowszymi trendami. Wierzę, że dobrze zorganizowana wiedza to klucz do sukcesu w karierze programisty.

Napisz komentarz