UltKit

Tester regex

Scrieți un model, bifați flagurile de care aveți nevoie și lipiți un text: fiecare potrivire este evidențiată pe măsură ce tastați și apare în listă cu poziția și grupurile de captură. Modelul rulează pe motorul regex JavaScript al browserului dumneavoastră, așa că rezultatele sunt aceleași ca în codul dumneavoastră, iar textul rămâne pe dispozitiv.

Indicatori

0 caractere · 0 cuvinte · 0 rânduri

Potrivirile sunt evidențiate aici.

0 caractere · 0 cuvinte · 0 rânduri

Funcționează integral în această filă a browserului. Textul dvs. nu este încărcat și nici stocat.

Elemente regex JavaScript

Coloana primei potriviri a fost obținută rulând fiecare tipar pe textul său cu motorul JavaScript care a construit această pagină.

TokenSemnificațieTiparTextPrima potrivire
\dCifră 0–9/\d+/Order 66 shipped66
\wLiteră, cifră sau liniuță de subliniere (ASCII)/\w+/snake_case-idsnake_case
\sSpațiu alb, inclusiv tabulatoare și întreruperi de rând/\s+/two spaces
.Orice caracter în afară de întreruperea de rând (cu excepția s)/a.c/abc a-cabc
^ $Începutul și sfârșitul intrării (sau al rândului, cu m)/^\w+$/singlesingle
[abc]Unul dintre caracterele listate/[aeiou]/rhythm and bluesa
[^abc]Orice caracter nelistat/[^0-9]+/2026-10-18-
* + ?0 sau mai multe, 1 sau mai multe, 0 sau 1/colou?r/color colourcolor
{n,m}Între n și m ori/\d{2,4}/7 42 1999 12345642
(…)Grup de captură/(\d+)px/width: 320px320px
(?<name>…)Grup de captură denumit/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Grup fără captură/(?:ab)+/ababab!ababab
a|bOricare parte/cat|dog/hotdogdog
\bLimită de cuvânt/\bcat\b/concat catcat
(?=…)Urmat de (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Care nu este precedat de (lookbehind negativ)/(?<!\$)\b\d+/$30 or 4040
\p{L}Orice literă Unicode (necesită u)/\p{L}+/unaïve 東京naïve

Cele șase flaguri și ce schimbă fiecare

g (global) găsește toate potrivirile, nu se oprește la prima; fără el, lista conține o singură intrare. i ignoră diferența dintre majuscule și minuscule. m (multiline) face ca ^ și $ să se potrivească la începutul și la sfârșitul fiecărei linii, nu doar al întregului text, ceea ce este util pentru un tipar precum spațiile de la final de rând. s (dotAll, adăugat în ES2018) permite ca . să se potrivească și cu întreruperile de rând. u (unicode) tratează textul ca puncte de cod, deci un emoji contează ca un singur caracter, și activează secvențele de proprietăți precum \p{L} pentru orice literă din orice alfabet. y (sticky) se potrivește doar exact la poziția curentă, modul folosit de analizoarele lexicale. JavaScript mai are d pentru indicii potrivirilor și v pentru operații cu mulțimi în clase; acest tester se limitează la cele șase de mai sus.

Sub textul de test, fiecare potrivire își arată indexul și grupurile. Grupurile numerotate provin din parantezele simple, (?:…) grupează fără captare, iar (?<year>\d{4}) creează un grup numit, care apare după nume, așa cum arată exemplul cu data ISO. Meniul Common patterns inserează puncte de plecare testate pentru adrese de e-mail, URL-uri, adrese IPv4, culori hex, UUID-uri, cuvinte repetate și spații la final de rând. Considerați tiparul pentru e-mail doar o verificare orientativă, nu o validare: gramatica completă a adreselor este mult mai permisivă, iar singurul test real este trimiterea unui mesaj.

Lookbehind și backtracking catastrofal

Lookaround-urile verifică ce înconjoară o poziție, fără a consuma text. Lookahead-ul, (?=…) și (?!…), există de mult în JavaScript; lookbehind-ul, (?<=…) și (?<!…), a apărut în ES2018 și a ajuns în toate browserele majore odată cu Safari 16.4, în 2023. Astfel, (?<=\$)\d+ găsește 42 în „$42”, fără semnul dolarului. Spre deosebire de multe alte motoare, JavaScript permite lookbehind de orice lungime.

Motorul JavaScript folosește backtracking: când o cale eșuează, se întoarce și încearcă alternativele. Cuantificatorii imbricați, precum (a+)+$, îi dau un număr exponențial de moduri de a împărți același text, așa că un șir de 30 de litere a urmate de un x poate dura secunde, iar câteva litere în plus pot dura ore. Acesta este backtracking catastrofic, iar pe servere devine ReDoS, o negare a serviciului; o singură regulă WAF cu acest defect a scos din funcțiune rețeaua Cloudflare timp de aproximativ o jumătate de oră, pe 2 iulie 2019. Deoarece acest tester rulează în fila dvs., un asemenea tipar poate bloca pagina; reîncărcați și rescrieți-l astfel încât doi cuantificatori să nu poată prelua aceleași caractere, folosind clase mai stricte precum [^,]* în loc de .*, sau ancore. Pentru editarea textului în sine, nu pentru potrivire, consultați instrumentele pentru text; mai multe utilitare pentru dezvoltatori găsiți în secțiunea instrumente pentru dezvoltatori.

Întrebări frecvente

De ce expresia regex găsește doar o singură potrivire?
Flagul g este dezactivat. Fără el, motorul se oprește după prima potrivire. Bifați g pentru a lista toate aparițiile; flagul y singur găsește și el mai multe, dar doar dacă se succed direct.
În JavaScript, \d recunoaște cifre din alte sisteme de scriere?
Nu. În JavaScript \d înseamnă doar 0–9, iar \w doar litere ASCII, cifre și liniuță de subliniere, chiar și cu flagul u. Folosiți \p{Nd} sau \p{L} cu u pentru alte alfabete.
Un model testat aici se comportă la fel în Python sau PHP?
Sintaxa de bază se transferă, dar detaliile diferă: grupurile numite din Python se scriu (?P<name>…), PHP și Python acceptă cuantificatori posesivi care lipsesc din JavaScript, iar regulile pentru lookbehind variază. Retestați în motorul țintă.
Cum găsesc un punct sau o paranteză ca atare?
Precedați-l cu o bară inversă: \. se potrivește cu un punct, iar \[ cu o paranteză pătrată deschisă. În interiorul unei clase de caractere, majoritatea simbolurilor sunt deja literale, deci [.] se potrivește tot doar cu un punct.
De ce s-a blocat pagina în timp ce scriam un model?
Probabil tiparul a provocat backtracking catastrofic pe textul dvs. Reîncărcați, apoi evitați cuantificatorii imbricați precum (.*)* sau (a+)+ și faceți ca fiecare parte să potrivească cât mai puțin.