Cum funcționează regex în browserul tău?
Fiecare runtime JavaScript livrează un motor de expresii regulate nativ — new RegExp(pattern, flags) compilează tiparul tău, apoi metode precum String.prototype.match, String.prototype.replace și RegExp.prototype.exec îl execută pe orice șir de intrare. Acest testor îmbracă acel motor într-o interfață, astfel încât să poți edita, rula și inspecta tipare fără a părăsi browserul. Nimic din ceea ce tastezi — tipar, flaguri, șir de test sau înlocuire — nu este trimis prin rețea.
Cum funcționează testorul de regex?
Conducta este alcătuită din câțiva pași scurți, toți rulând pe partea clientului la fiecare tastare (debashate la 150 ms pentru ca tastarea să rămână fluidă):
- Corpul tiparului tău este citit din câmpul de mai sus (fără delimitatoare
/la început sau sfârșit — sunt decorative). Flagurile selectate prin pastile sunt concatenate într-un șir de flaguri precumgisaugimsuy. new RegExp(corpTipar, flaguri)compilează tiparul. Dacă motorul aruncă oSyntaxError(de exemplu, o paranteză nepotrivită sau un escape invalid), mesajul este afișat deasupra șirului de test și lista de potriviri este golită. Eroarea de compilare este efectiverr.messagede la V8 / SpiderMonkey / JavaScriptCore, deci se potrivește cu ceea ce ai vedea în DevTools.- Pentru lista de potriviri, testorul enumeră întotdeauna cu un flag global sintetic — astfel încât, chiar dacă dezactivezi
g, lista arată în continuare fiecare potrivire. Protecția standard împotriva potrivirilor de lățime zero (if (m.index === rx.lastIndex) rx.lastIndex++) menține bucla să nu se învârtă pe tiparele care se potrivesc cu un șir gol. Modul înlocuire respectă setul real de flaguri, deci$&se comportă la fel caString.prototype.replace. - Între fiecare iterație, testorul verifică
performance.now() - startși anulează după 50 ms. Aceasta protejează împotriva backtracking-ului catastrofal pe intrări precum(a+)+$împotriva unui șir lung dea— fila s-ar bloca altfel. Protecția este cu cel mai bun efort: un tipar patologic cu o singură potrivire poate consuma totuși timp în cadrul unui singur apelexec. Dacă se întâmplă vreodată, reîmprospătează fila și rescrie tiparul cu un cuantificator non-lacom sau un posesiv de tip atomic (de exemplu,[^x]*x). - Șirul de test este împărțit în segmente la intervalul fiecărei potriviri, iar segmentele potrivite sunt împachetate în elemente
<mark class="rx-match rx-cap-N">, undeNalternează prin șase culori de paletă, astfel încât potrivirile adiacente să fie ușor de deosebit dintr-o privire. Grupurile numerotate ale fiecărei potriviri (m[1],m[2], …) și grupurile numite (m.groups) sunt afișate ca rânduri etichetate dedesubt; dacă flaguldeste setat, sunt afișați și indecșii[start, sfârșit]per grup.
De ce să folosești acest testor de regex?
- Confidențialitate: fiecare tipar, șir de test și înlocuire rulează în browser folosind motorul JavaScript RegExp încorporat. Nimic nu părăsește fila — important când intrarea este un jurnal de client, un model de acreditare scurs sau orice altceva pe care nu l-ai lipi într-un teren de joacă regex SaaS găzduit.
- Smecherie cinstită: testorul expune exact motorul regex pe care îl folosesc Node.js, Chrome, Safari, Firefox și orice validator de formulare bazat pe browser. Nu există un strat de traducere Perl pentru a ascunde diferențe subtile — ceea ce funcționează aici funcționează în codul tău.
- Depanare a capturii și grupurilor numite: fiecare grup numerotat (
$1,$2, …) și grup numit ($<an>) este afișat per potrivire, astfel încât să poți construi un parser și să citești sloturile înapoi fără a ghici. Modul înlocuire îți permite să amesteci liber grupurile —$2-$1schimbă primele două sloturi,$<nume>introduce un slot numit, iar$&ecou întreaga potrivire. - Protecție împotriva backtracking-ului catastrofal: un plafon de 50 ms la enumerare anulează tiparele patologice precum
(a+)+$înainte de a îngheța fila. Vezi o eroare explicativă în locul unui browser blocat, iar pagina se recuperează imediat.
Care sunt aplicațiile comune ale unui testor de regex?
Expresiile regulate apar în dezvoltarea web, securitate și prelucrarea datelor — acest testor vizează cele mai frecvente cazuri de utilizare:
- Validare formulare: prototipează un tipar pentru e-mail, telefon sau cod poștal, lipește exemple de intrări în șirul de test și confirmă că fiecare caz pozitiv se potrivește și fiecare caz negativ nu, înainte de a livra tiparul în codul de producție.
- Răzuire jurnale: lipește o bucată de jurnal NGINX, aplicație sau audit, scrie un tipar cu grupuri numite pentru părțile care te interesează (
(?<ip>…) (?<cale>…)) și citește sloturile capturate per potrivire pentru a confirma că analizatorul tău este corect. - Căutare și înlocuire pentru refactorizare: folosește modul înlocuire pentru a rescrie identificatori într-un fragment —
(\\w+)\.set(\\w+)\\(→$1.$2 =transformă apelurile de getter în atribuiri de proprietăți, iar previzualizarea live arată rezultatul înainte de a-l comite într-un codemod.
Cum arată un exemplu de regex?
Ia tiparul (\\d{4})-(\\d{2})-(\\d{2}) cu flagul g, rulat pe șirul de test release 2025-11-15, prerelease 2026-05-25. Motorul găsește două potriviri. Prima potrivire este 2025-11-15 cu grupul 1 = 2025, grupul 2 = 11, grupul 3 = 15. A doua potrivire este 2026-05-25 cu aceeași formă de grupuri. În modul înlocuire, modelul de înlocuire $3/$2/$1 rescrie ambele date la 15/11/2025 și 25/05/2026 — o conversie ISO în ZL (zi/lună) dintr-un singur tipar pe care o poți verifica vizual înainte de a conecta tiparul într-un script.
Folosește acest testor ca drum rapid pentru orice lucrare cu regex — construirea, depanarea sau rescrierea tiparelor. Totul rulează local; nimic nu este înregistrat; motorul regex este cel pe care îl livrează browserul tău, deci comportamentul se potrivește cu ceea ce codul de producție va vedea în runtime.