Cum se folosește: Tester regex
- Introdu tiparul între bare oblice, fără
/ din jur. - Activează flag-uri precum
g (toate potrivirile), i (ignoră majusculele) și m (multilinie). - Lipește textul de test. Potrivirile sunt evidențiate în dreapta și listate mai jos cu indexul și grupurile de captură.
- Bifează Înlocuiește și introdu o înlocuire ca
$1 sau $<name> pentru a previzualiza String.replace. - Alege un tipar din Biblioteca de tipare pentru a porni de la un regex testat pentru e-mail, URL, IP sau dată.
Expresii regulate JavaScript
Acest tester folosește motorul RegExp propriu al browserului, așa că rezultatele sunt exact cele returnate de String.match, matchAll, replace și RegExp.exec în JavaScript și Node.js. Asta include sintaxa modernă: grupuri denumite (?<name>…), lookbehind (?<=…), clase de proprietăți Unicode precum \p{L} cu flag-ul u și indicii potrivirilor cu flag-ul d.
Ce fac flag-urile
| Flag | Nume | Efect |
g | global | Găsește toate potrivirile în loc să se oprească la prima. |
i | ignoreCase | Literele se potrivesc indiferent de majuscule. |
m | multiline | ^ și $ se potrivesc la începutul și sfârșitul fiecărei linii. |
s | dotAll | . se potrivește și cu sfârșiturile de linie. |
u | unicode | Tratează tiparul ca puncte de cod; activează \p{…} și \u{…}. |
y | sticky | Potrivește doar la poziția curentă lastIndex. |
d | hasIndices | Raportează pozițiile de început și sfârșit pentru fiecare grup de captură. |
Protecție împotriva backtracking-ului catastrofal
Tiparele cu cuantificatori imbricați, precum (a+)+$ sau (\w|\d)*x, pot dura un timp exponențial pe intrări care aproape se potrivesc. Într-o pagină web obișnuită, asta blochează tabul. Aici, fiecare căutare rulează într-un Web Worker în fundal, oprit după o secundă, iar tu primești un avertisment clar în loc de un browser blocat. Același tipar în codul de producție ar putea fi o vulnerabilitate ReDoS, așa că tratează avertismentul ca pe un bug de corectat.
Sfaturi pentru regex-uri mai bune
- Ancorează tiparele cu
^ și $ când validezi valori întregi, altfel trece o potrivire oriunde în șir.
- Preferă clase specifice precum
[^"]* în loc de .*; sunt mai rapide și evită potrivirile excesive.
- Folosește grupuri fără captură
(?:…) când nu ai nevoie de valoarea capturată.
- Denumește-ți grupurile.
match.groups.year se citește mai ușor decât match[1].
Întrebări frecvente
Ce variantă de regex folosește acest tester?
JavaScript (ECMAScript), prin RegExp integrat în browser. Majoritatea sintaxei este comună cu PCRE, Python și Java, dar funcții precum cuantificatorii posesivi, grupurile atomice și modificatorii inline ca (?i) nu sunt disponibile în JavaScript.
De ce tiparul meu găsește o singură potrivire?
Fără flag-ul g (global), JavaScript se oprește după prima potrivire. Activează g pentru a găsi toate aparițiile.
Cum fac referire la grupuri în înlocuire?
Folosește $1, $2… pentru grupuri numerotate, $<name> pentru grupuri denumite, $& pentru potrivirea întreagă și $$ pentru un semn de dolar literal.
De ce testerul s-a oprit cu timeout?
Tiparul a durat mai mult de o secundă pe intrarea ta, ceea ce înseamnă aproape întotdeauna backtracking catastrofal. Caută cuantificatori imbricați ca (x+)+ sau alternative suprapuse ca (a|a)* și rescrie-le astfel încât fiecare caracter să poată fi potrivit într-un singur mod.
Sunt datele mele de test trimise undeva?
Nu. Potrivirea rulează local, într-un Web Worker din browser. Tiparul și textul sunt salvate doar în browserul tău, ca să le găsești acolo când revii.