Tester regex
Inserisci un pattern, scegli i flag, incolla il testo da testare: il tester regex mostra ogni corrispondenza con il suo indice, il contenuto dei gruppi di cattura numerati e con nome e spiega ogni parte del pattern in italiano. Il confronto usa il motore JavaScript (ECMAScript) del tuo browser.
Come si calcola
Questo tester regex usa la variante JavaScript delle espressioni regolari definita dallo standard ECMA-262 e implementata dal tuo browser. Un pattern che funziona qui funziona esattamente allo stesso modo in String.prototype.match, matchAll, replace e RegExp.prototype.test – in Chrome, Firefox, Safari e Node.js.
Come leggere il risultato
- Corrispondenze: ogni corrispondenza con il suo indice (posizione del carattere a partire da zero, contata in unità di codice UTF-16 come fa JavaScript – un’emoji conta come 2) e la sua lunghezza. Gli a capo sono mostrati come ↵, i tab come ⇥.
- Gruppi per corrispondenza: cosa ha catturato ogni coppia di parentesi – gruppi numerati
( )e gruppi con nome(?<nome> ). “Non ha partecipato” significa che il gruppo si trova in un’alternativa non presa. Con il flagdottieni anche la posizione di ogni gruppo. - Pattern spiegato: ogni token in italiano semplice; le righe indentate (›) sono dentro un gruppo.
I flag
g trova tutte le corrispondenze invece della sola prima, i ignora maiuscole/minuscole, m fa funzionare ^ e $ per ogni riga, s fa sì che il punto corrisponda anche agli a capo. u tratta emoji e altri caratteri fuori dal Basic Multilingual Plane come un singolo carattere e abilita le proprietà Unicode come \p{L} (qualsiasi lettera, incluse è o ñ). v è la versione più recente di u con operazioni tra insiemi come [\p{L}--[a-z]]; u e v non si possono combinare. y (“sticky”) trova solo corrispondenze consecutive senza spazi tra loro.
Protezione da loop infiniti e blocchi
Pattern come a* o \b possono produrre corrispondenze vuote. Come JavaScript stesso, il tester avanza allora di un carattere (un intero code point con u/v), quindi non si crea un loop infinito. Vengono cercate al massimo 1.000 corrispondenze.
Il pericolo maggiore è il backtracking catastrofico (ReDoS): quantificatori annidati come (a+)+$ provano un numero esponenziale di combinazioni su una stringa che non corrisponde – 30 caratteri possono tenere occupato il motore per minuti. Per questo la ricerca gira in un thread separato in background e viene fermata dopo 2 secondi; la pagina resta reattiva. Evita questi pattern anche nel tuo codice, soprattutto sull’input dell’utente.
Differenze rispetto ad altre varianti di regex
PCRE (PHP), Python, Java e .NET differiscono nei dettagli: JavaScript non ha quantificatori possessivi (a++), né gruppi atomici, né le ancore \A o \Z; \w copre solo A–Z, a–z, 0–9 e il trattino basso – per le lettere accentate usa \p{L} con il flag u.
Il tuo testo di prova non viene inviato, non viene salvato e non finisce nel link – solo il pattern e i flag lo fanno.
Domande frequenti
Come si testa un’espressione regolare?
Digita il pattern senza barre nel campo in alto, seleziona i flag necessari e incolla il testo. Tutte le corrispondenze vengono subito evidenziate nel testo ed elencate con il loro indice; sotto vedi cosa ha catturato ogni gruppo.
Perché \w non corrisponde alle lettere accentate?
In JavaScript \w rappresenta solo A–Z, a–z, 0–9 e _. Per le lettere di qualsiasi lingua usa \p{L} con il flag u, ad es. [\p{L}\d_]+ per una parola come “città”.
Qual è la differenza tra greedy e lazy?
I quantificatori greedy (*, +, {2,}) catturano più testo possibile, quelli lazy con un punto interrogativo finale (*?, +?) il meno possibile. Su “<b>x</b>”, <.+> corrisponde all’intera stringa, <.+?> solo a “<b>”.
Come si assegna un nome a un gruppo di cattura?
Usa (?<nome>…). Nel codice lo leggi con match.groups.nome, in una stringa di sostituzione con $<nome>, e all’interno del pattern con il backreference \k<nome>.
Perché la ricerca è stata interrotta?
Ha impiegato più di 2 secondi – di solito per backtracking catastrofico con quantificatori annidati come (\w+)*. Semplifica il pattern: non annidare i quantificatori, rendi inequivocabili le alternative e ancoralo con ^ e $.
Il risultato vale anche per PHP o Python?
Per i pattern semplici di solito sì, ma è garantito solo per JavaScript. PHP (PCRE) e Python supportano sintassi aggiuntive come i quantificatori possessivi o \A, e Python scrive tradizionalmente i gruppi con nome come (?P<nome>…).
Fonti e riferimenti normativi
- ECMA-262 § 22.2: ECMA-262 – ECMAScript Language Specification, RegExp (Regular Expression) Objects
- MDN Web Docs – Regular expressions (Guide)
- MDN Web Docs – RegExp.prototype.flags
- MDN Web Docs – String.prototype.matchAll() (empty matches, lastIndex)
- OWASP – Regular expression Denial of Service (ReDoS)
Aggiornato al:
Strumenti correlati
- Formattare, convalidare e minificare JSONConvalida il tuo JSON secondo la RFC 8259: errore con riga, colonna e spiegazione chiara. Formatta, minifica e ordina le chiavi. Tutto nel browser.
- Validatore XML e CSV onlineControlla se un XML è ben formato e valida un CSV secondo la RFC 4180: errori con riga e colonna, delimitatore rilevato, anteprima tabella. Tutto in locale.
- Codifica e decodifica Base64Codifica e decodifica Base64 e Base64url con UTF-8 corretto, più URL encode/decode (percent-encoding). Errori chiari, tutto in locale nel tuo browser.
- Generatore di hash: SHA-256, SHA-512, SHA-1, MD5Calcola gli hash SHA-256, SHA-384, SHA-512, SHA-1 e MD5 di un testo o di un file e verifica un checksum – in locale nel browser, senza upload, gratis.
- Verifica la sintassi di un indirizzo emailControlla uno o più indirizzi email secondo gli RFC 5321/5322: lunghezze, dominio, domini con accenti (Punycode). In locale, nessun invio.
- Abbinare i font – coppie per titoli e testoCoppie di font per titoli e testo con anteprima live, CSS pronto da copiare e disponibilità su Windows, Mac, iPhone e Android – solo font di sistema.