UltKit

Tester wyrażeń regularnych (regex)

Wpisz wzorzec, zaznacz potrzebne flagi i wklej tekst: każde dopasowanie jest podświetlane na bieżąco i wyświetlane na liście wraz z pozycją i grupami przechwytującymi. Wzorzec działa na wbudowanym silniku wyrażeń regularnych JavaScript Twojej przeglądarki, więc wyniki są zgodne z Twoim kodem, a tekst pozostaje na Twoim urządzeniu.

Flagi

Znaki: 0 · słowa: 0 · wiersze: 0

Dopasowania zostaną podświetlone tutaj.

Znaki: 0 · słowa: 0 · wiersze: 0

Działa w całości w tej karcie przeglądarki. Twój tekst nie jest wysyłany ani zapisywany.

Elementy wyrażeń regularnych JavaScript

Kolumnę pierwszego dopasowania uzyskano, uruchamiając każdy wzorzec na jego tekście w silniku JavaScript, który zbudował tę stronę.

TokenZnaczenieWzorzecTekstPierwsze dopasowanie
\dCyfra 0–9/\d+/Order 66 shipped66
\wLitera, cyfra lub podkreślenie (ASCII)/\w+/snake_case-idsnake_case
\sBiały znak, w tym tabulatory i podziały wierszy/\s+/two spaces
.Dowolny znak poza podziałem wiersza (chyba że s)/a.c/abc a-cabc
^ $Początek i koniec danych (lub wiersza, z m)/^\w+$/singlesingle
[abc]Jeden z wymienionych znaków/[aeiou]/rhythm and bluesa
[^abc]Dowolny znak spoza listy/[^0-9]+/2026-10-18-
* + ?0 lub więcej, 1 lub więcej, 0 lub 1/colou?r/color colourcolor
{n,m}Od n do m razy/\d{2,4}/7 42 1999 12345642
(…)Grupa przechwytująca/(\d+)px/width: 320px320px
(?<name>…)Nazwana grupa przechwytująca/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Grupa bez przechwytywania/(?:ab)+/ababab!ababab
a|bJedna lub druga strona/cat|dog/hotdogdog
\bGranica słowa/\bcat\b/concat catcat
(?=…)Z następującym (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Bez poprzedzającego (negative lookbehind)/(?<!\$)\b\d+/$30 or 4040
\p{L}Dowolna litera Unicode (wymaga u)/\p{L}+/unaïve 東京naïve

Sześć flag i co zmieniają

g (global) znajduje wszystkie dopasowania zamiast zatrzymać się na pierwszym; bez niej lista zawiera jeden wpis. i ignoruje wielkość liter. m (multiline) sprawia, że ^ i $ dopasowują początek i koniec każdego wiersza, a nie tylko całego tekstu, co przydaje się we wzorcu na końcowe spacje. s (dotAll, dodana w ES2018) pozwala, by . dopasowywała też znaki końca wiersza. u (unicode) traktuje tekst jako punkty kodowe, więc emoji liczy się jako jeden znak, i włącza sekwencje właściwości, takie jak \p{L} dla dowolnej litery w dowolnym piśmie. y (sticky) dopasowuje tylko dokładnie w bieżącej pozycji, a ten tryb stosują tokenizery. JavaScript ma też flagę d (indeksy dopasowań) i v (operacje na zbiorach w klasach); ten tester obsługuje tylko sześć powyższych.

Pod tekstem testowym każde dopasowanie pokazuje swój indeks i grupy. Grupy numerowane powstają ze zwykłych nawiasów, (?:…) grupuje bez przechwytywania, a (?<year>\d{4}) tworzy grupę nazwaną, która pojawia się pod swoją nazwą, jak pokazuje przykład z datą ISO. Menu Common patterns wstawia sprawdzone punkty wyjścia dla adresów e-mail, adresów URL, adresów IPv4, kolorów szesnastkowych, UUID, powtórzonych słów i końcowych spacji. Wzorzec e-mail traktuj jako szybką kontrolę, a nie walidację: pełna gramatyka adresów jest znacznie bardziej liberalna, a jedynym prawdziwym testem jest wysłanie wiadomości.

Lookbehind i katastrofalne nawracanie (backtracking)

Asercje wyprzedzające i wsteczne sprawdzają, co otacza daną pozycję, bez zużywania znaków. Asercje wyprzedzające, (?=…) i (?!…), od zawsze są częścią JavaScriptu; asercje wsteczne, (?<=…) i (?<!…), pojawiły się w ES2018 i trafiły do wszystkich głównych przeglądarek, gdy w 2023 roku obsłużyła je Safari 16.4. Dlatego (?<=\$)\d+ znajduje 42 w „$42” bez znaku dolara. W odróżnieniu od wielu innych silników JavaScript dopuszcza asercje wsteczne o dowolnej długości.

Silnik JavaScriptu działa z nawrotami: gdy ścieżka zawiedzie, wraca i próbuje alternatyw. Zagnieżdżone kwantyfikatory, takie jak (a+)+$, dają mu wykładniczą liczbę sposobów podziału tego samego tekstu, więc ciąg 30 liter a zakończony literą x może zająć kilka sekund, a kilka liter więcej nawet godziny. To katastrofalny nawrót, a na serwerach staje się on atakiem ReDoS, czyli odmową usługi; pojedyncza reguła WAF z taką wadą wyłączyła sieć Cloudflare na około pół godziny 2 lipca 2019 roku. Ponieważ ten tester działa w Twojej karcie, taki wzorzec może zawiesić stronę; odśwież ją i przepisz wzorzec tak, aby żadne dwa kwantyfikatory nie mogły obejmować tych samych znaków, używając węższych klas, jak [^,]* zamiast .*, albo kotwic. Do edycji samego tekstu, a nie dopasowywania, zobacz narzędzia tekstowe; więcej narzędzi dla programistów znajdziesz w sekcji narzędzia dla programistów.

Najczęściej zadawane pytania

Dlaczego moje wyrażenie regularne znajduje tylko jedno dopasowanie?
Flaga g jest wyłączona. Bez niej silnik zatrzymuje się po pierwszym dopasowaniu. Zaznacz g, aby wyświetlić wszystkie wystąpienia; sama flaga y też znajduje kilka, ale tylko wtedy, gdy następują bezpośrednio po sobie.
Czy \d w JavaScript dopasowuje cyfry z innych systemów pisma?
Nie. W JavaScripcie \d oznacza tylko 0–9, a \w tylko litery ASCII, cyfry i podkreślenie, nawet z flagą u. Dla innych pism użyj \p{Nd} lub \p{L} z flagą u.
Czy wzorzec przetestowany tutaj zadziała tak samo w Pythonie lub PHP?
Podstawowa składnia jest wspólna, ale szczegóły się różnią: nazwane grupy w Pythonie zapisuje się jako (?P<name>…), PHP i Python obsługują kwantyfikatory zaborcze, których JavaScript nie ma, a reguły asercji wstecznych bywają różne. Przetestuj wzorzec ponownie w docelowym silniku.
Jak dopasować dosłowną kropkę lub nawias?
Poprzedź go ukośnikiem odwrotnym: \. dopasowuje kropkę, a \[ otwierający nawias kwadratowy. W klasie znaków większość symboli jest już dosłowna, więc [.] też dopasowuje tylko kropkę.
Dlaczego strona zawiesiła się podczas wpisywania wzorca?
Wzorzec prawdopodobnie wywołał katastrofalny nawrót na Twoim tekście. Odśwież stronę, unikaj zagnieżdżonych kwantyfikatorów, takich jak (.*)* lub (a+)+, i spraw, by każda część dopasowywała jak najmniej.