Tester regex pozwala wpisać wyrażenie regularne i od razu zobaczyć, co pasuje do niego w przykładowym tekście. Programiści używają regex (wyrażeń regularnych) do walidacji danych wejściowych, wyciągania danych z ciągów znaków, przeszukiwania logów, czyszczenia tekstu, tworzenia poleceń w edytorze i reguł typu znajdź i zamień.
Na początku regex wygląda jak szyfr, bo kilka symboli niesie mnóstwo znaczenia. Tester na żywo odczarowuje go: każdy wpisany znak aktualizuje podświetlone dopasowania i grupy przechwytujące, więc możesz eksperymentować, aż wzorzec zrobi dokładnie to, czego chcesz.
Różne języki programowania używają nieco innych silników regex (JavaScript, PCRE, Python, Java, Go, .NET). Podstawy, czyli znaki, klasy znaków, kwantyfikatory, kotwice i grupy, działają wszędzie. Różnice pojawiają się przy funkcjach zaawansowanych (lookbehind, grupy nazwane, kwantyfikatory zaborcze).
Czego nauczysz się, testując regex
Wzorzec opisuje *kształt* tekstu, a nie jego znaczenie. \d+ pasuje do ciągu cyfr, ale nie wie, czy liczba ma sens.
Flagi zmieniają działanie: g znajduje wszystkie dopasowania, i ignoruje wielkość liter, m sprawia, że ^ i $ pasują do początku i końca linii, a s pozwala . dopasować znak nowej linii.
Grupy przechwytujące (...) wyciągają fragmenty dopasowania, zamiast tylko sprawdzać, czy cały ciąg pasuje. To podstawa parsowania.
Kwantyfikatory są domyślnie *zachłanne* (dopasowują jak najwięcej). Dodanie ? czyni je *leniwymi* (dopasowują jak najmniej).
Jak używać testera regex krok po kroku
1
Wpisz swój wzorzec
Wpisz wyrażenie regularne w polu wzorca. Nie dodawaj otaczających ukośników /: to składnia literału w JavaScript, a nie część samego wzorca.
2
Włącz potrzebne flagi
Najczęściej przydadzą się g (znajdź wszystkie dopasowania) oraz i (bez rozróżniania wielkości liter). Użyj m dla kotwic działających w każdej linii i s, aby . pasowała też do znaku nowej linii.
3
Wklej tekst testowy
Wklej przykładowy tekst do pola testowego. Dopasowania podświetlają się w trakcie pisania, a grupy przechwytujące pojawiają się pod listą dopasowań.
4
Przeczytaj panel dopasowań
Każde dopasowanie pokazuje pozycję, pełny tekst i przechwycone grupy. Dzięki temu sprawdzisz, czy wzorzec łapie to, co trzeba, i pomija resztę.
5
Poprawiaj, aż będzie dobrze
Zawężaj kwantyfikatory, dodawaj kotwice (^, $) albo escapuj znaki dosłowne (\., \?), aż dopasowania i grupy będą dokładnie takie, jakich potrzebuje twój kod.
Ściągawka regex
80% składni regex, której użyjesz w 99% przypadków. Dodaj ją do zakładek: to najszybszy sposób na zapamiętanie składni. Pełną gramatykę znajdziesz w przewodniku MDN po wyrażeniach regularnych.
Token
Znaczenie
Przykład
.
Dowolny pojedynczy znak (oprócz nowej linii)
a.c pasuje do abc, a-c
\d\D
Cyfra / nie cyfra
\d+ pasuje do 123
\w\W
Znak słowa (litera/cyfra/_) / znak spoza słowa
\w+ pasuje do hello_1
\s\S
Biały znak / nie biały znak
\s+ pasuje do spacji i tabulatorów
[abc]
Dowolny z a, b lub c
[aeiou] pasuje do samogłoski
[^abc]
Żaden z a, b ani c
[^0-9] pasuje do znaków innych niż cyfry
*+?
0+, 1+, 0 lub 1 poprzedniego elementu
a+ pasuje do a, aaa
{n}{n,m}
Dokładnie n / od n do m
\d{3,5} od 3 do 5 cyfr
^$
Początek / koniec ciągu (lub linii z m)
^Error linia zaczyna się od Error
(...)
Grupa przechwytująca
(\d+) przechwytuje cyfry
(?:...)
Grupa nieprzechwytująca
(?:foo|bar) grupuje bez przechwytywania
a|b
Alternatywa: a lub b
yes|no
\b
Granica słowa
\bcat\b pasuje do cat, ale nie do cats
Przykłady regex do wypróbowania
Dopasuj prosty kształt adresu e-mail
Wzorzec
^[\w.+-]+@[\w-]+\.[\w.-]+$
Tekst
learner@coddy.tech
Ten wzorzec łapie podstawowy kształt something@something.something. Prawdziwa walidacja adresów e-mail jest dużo bardziej liberalna: w formularzach lepiej użyć type="email" i sprawdzenia po stronie serwera.
Wyciągnij wszystkie liczby ze zdania
Wzorzec
\d+
Tekst
Lesson 12 has 3 tasks and 2 quizzes.
Z flagą g wzorzec znajduje każdy ciąg cyfr: 12, 3, 2. \d+ to w regex odpowiednik "jedna lub więcej cyfr".
Wyciągnij id z adresu URL grupą przechwytującą
Wzorzec
/users/(\d+)
Tekst
/users/42/profile
Pełne dopasowanie to /users/42, a grupa przechwytująca (\d+) wyciąga samo 42. To właśnie dzięki grupom przechwytującym możesz naprawdę *wykorzystać* dopasowanie regex w kodzie.
Kwantyfikatory zachłanne i leniwe
Zachłanny
<.+>
Leniwy
<.+?>
Tekst
<b>hello</b>
Wersja zachłanna dopasowuje cały ciąg <b>hello</b>, bo .+ bierze tyle, ile się da. Wersja leniwa (+?) zatrzymuje się na pierwszym >, więc dopasowuje tylko <b> i </b>.
Częste błędy w regex
Brak escapowania znaków specjalnych: ., ?, +, (, ), [, ], {, }, \, ^, $, |. Jeśli chodzi ci o znak dosłowny, poprzedź go \.
Pisanie wzorca, który działa na jednym przykładzie, ale zawodzi na prawdziwych danych z dodatkowymi spacjami, podziałami linii lub brakującymi polami.
Zachłanne użycie .*, które dopasowuje dużo więcej niż trzeba. Zamień je na .*? albo bardziej precyzyjną klasę znaków.
Próba parsowania głęboko zagnieżdżonych formatów (pełny HTML, złożone języki programowania, zbalansowane nawiasy) za pomocą regex. Użyj do tego prawdziwego parsera.
Pominięcie flagi g i zdziwienie, że podświetla się tylko pierwsze dopasowanie.
Regex: najczęstsze pytania
Co to jest regex?
Regex to skrót od *regular expression*, czyli wyrażenie regularne: zwięzły język wzorców do dopasowywania tekstu. Ta sama idea istnieje w prawie każdym języku programowania oraz w wielu edytorach i narzędziach wiersza poleceń.
Jak napisać wyrażenie regularne?
Zacznij od znaków dosłownych, które chcesz dopasować, a potem zastąp zmienne fragmenty klasami znaków (\d, \w, [abc]) i kwantyfikatorami (*, +, ?, {n,m}). Korzystaj z testera regex i poprawiaj wzorzec, aż będzie pasował dokładnie do tych przypadków, o które ci chodzi.
Co oznacza \w w regex?
\w pasuje do znaku słowa: litery, cyfry lub podkreślnika. \W to odwrotność (dowolny znak spoza słowa). Dokładny zestaw zależy od silnika i flagi Unicode.
Dlaczego mój regex dopasowuje za dużo?
Kwantyfikatory są domyślnie zachłanne: .* dopasowuje jak najwięcej. Przełącz się na kwantyfikator leniwy (.*?) albo użyj bardziej precyzyjnej klasy znaków, żeby zatrzymać dopasowanie tam, gdzie chcesz.
Czy regex w JavaScript jest taki sam jak wszędzie indziej?
Podstawy są te same, ale silniki się różnią. JavaScript, PCRE, re w Pythonie, Java, Go i .NET obsługują nieco inne flagi i funkcje zaawansowane (lookbehind, grupy nazwane, kwantyfikatory zaborcze).
Czy początkujący powinni uczyć się regex?
Tak, ale stopniowo. Zacznij od znaków dosłownych, klas znaków, kwantyfikatorów, kotwic, flag i grup przechwytujących. Lookaroundy, grupy nazwane i warunkowe wyrażenia regularne zostaw na później.