Utilia

Tester regex

Testează expresii regulate JavaScript în timp real, cu potriviri evidențiate, grupuri de captură, înlocuire și explicația fiecărui element.

Fanioane

Potriviri
#PozițiePotrivireGrupuri

Explicația modelului

    Cum folosești testerul de regex

    1. Scrie modelul în Expresie regulată, fără barele oblice din jur. Barele și fanioanele active sunt afișate în jurul câmpului, ca în /model/g.
    2. Bifează Fanioane de care ai nevoie: g (global), i (ignoră majusculele), m (multilinie), s (dotAll), u (unicode) sau y (sticky).
    3. Lipește textul de căutat în Text de test. Potrivirile sunt evidențiate pe măsură ce scrii, iar tabelul listează fiecare potrivire cu poziția și grupurile ei de captură.
    4. Ca să încerci o substituție, completează Înlocuire. Caseta Rezultat după înlocuire arată textul cu fiecare potrivire înlocuită, gata de copiat.
    5. Citește Explicația modelului ca să verifici ce face fiecare parte a regex-ului tău. Nu știi de unde să începi? Apasă Încarcă un exemplu.

    Ce arată testerul

    • Potriviri evidențiate: fiecare potrivire din textul de test este marcată, așa că vezi dintr-o privire ce se prinde și ce scapă.
    • Tabelul de potriviri: numărul fiecărei potriviri, poziția ei (deplasarea în caractere de la început, numărând de la 0), textul potrivit și valoarea fiecărui grup de captură. Grupurile cu nume, precum (?<year>\d{4}), apar sub numele lor, iar grupurile care nu au participat la potrivire sunt afișate ca „(nepotrivit)”. Sunt listate primele 1.000 de potriviri.
    • Înlocuire: textul de înlocuire folosește sintaxa JavaScript: $1 sau $2 pentru grupuri numerotate, $<name> pentru grupuri cu nume, $& pentru întreaga potrivire și $$ pentru un semn dolar literal. Fără fanionul g, doar prima potrivire este înlocuită.
    • Explicație: modelul este împărțit în elemente (text literal, clase de caractere, ancore, grupuri, cuantificatori, lookaround, referințe inverse), fiecare cu o scurtă descriere. Grupurile imbricate sunt indentate, ceea ce face modelele lungi mult mai ușor de verificat.

    Fanioanele pe scurt

    Fanion Efect
    g Găsește toate potrivirile, în loc să se oprească la prima
    i Ignoră diferența dintre majuscule și minuscule
    m ^ și $ potrivesc începutul și sfârșitul fiecărei linii
    s . potrivește și rupturile de rând
    u Mod Unicode complet: \u{…}, \p{…} și emoji tratate ca un singur caracter
    y Sticky: fiecare potrivire trebuie să înceapă exact unde s-a terminat precedenta

    Backtracking catastrofal

    Unele modele cer timp exponențial pe un text care aproape se potrivește. Exemplul clasic este (a+)+$ testat pe un șir lung de a urmat de un b: motorul încearcă toate modurile de a împărți literele a între cei doi cuantificatori înainte să renunțe. Această problemă, cunoscută ca ReDoS, a doborât site-uri reale.

    Instrumentul îți protejează browserul în trei feluri. Potrivirea rulează într-un worker în fundal, care este oprit după 1,5 secunde; textul de test este limitat la 100.000 de caractere; iar explicația te avertizează când un grup repetat conține un alt cuantificator deschis. Când un model depășește timpul, rescrie-l astfel încât fiecare caracter să poată fi potrivit într-un singur fel, de exemplu a+$ în loc de (a+)+$.

    Întrebări frecvente

    Ce variantă de regex folosește acest instrument?

    Folosește motorul JavaScript (ECMAScript) al browserului tău, exact cum ar face new RegExp() și String.prototype.replace() în codul tău. Cea mai mare parte a sintaxei este comună cu PCRE, Python și Java, dar unele funcții diferă: cuantificatorii posesivi și grupurile atomice nu există în JavaScript, iar lookbehind este acceptat în toate browserele actuale.

    De ce găsește modelul meu o singură potrivire?

    Fanionul g este dezactivat. Fără el, JavaScript se oprește după prima potrivire, iar înlocuirea schimbă doar acea potrivire.

    Cum potrivesc un punct, o paranteză sau un semn de întrebare literal?

    Pune-le în față o bară oblică inversă: \., \[, \?. Explicația arată caracterele cu escape ca „(cu escape)”, ca să poți verifica.

    Este textul meu trimis undeva?

    Nu. Modelul și textul sunt procesate doar în browserul tău, ceea ce face acest instrument sigur pentru fișiere de jurnal sau date care conțin informații personale.

    De ce diferă poziția de coloana din editorul meu?

    Pozițiile numără caracterele de la 0, pe toate liniile, așa cum face match.index din JavaScript. Rupturile de rând contează ca un singur caracter, iar un emoji din afara planului multilingv de bază contează ca două.