Tester di espressioni regolari
Prova espressioni regolari localmente e controlla corrispondenze, gruppi e posizioni.
Come si usa
Digita un’espressione regolare JavaScript senza le barre delimitatrici, aggiungi i flag e incolla il testo in cui cercare. Il risultato elenca ogni corrispondenza con il suo numero, la posizione in cui inizia e il testo di ogni gruppo di cattura; un gruppo che non ha partecipato alla corrispondenza viene mostrato come —. Scrivi il pattern come lo scriveresti tra le barre nel codice: una sola barra rovesciata, come in \d, non due.
I flag cambiano il modo in cui viene applicato il pattern: g trova tutte le corrispondenze invece della sola prima, i ignora maiuscole e minuscole, m fa corrispondere ^ e $ all’inizio e alla fine di ogni riga, s permette al punto di corrispondere anche agli a capo, u attiva la corrispondenza Unicode completa, v è una versione potenziata di u che aggiunge le operazioni sugli insiemi nelle classi di caratteri (usa u o v, non entrambi), y (sticky) trova corrispondenze solo all’inizio del testo o esattamente dove è terminata la corrispondenza precedente, e d registra l’inizio e la fine di ogni gruppo (lo strumento non li mostra). Senza g (o y) viene mostrata solo la prima corrispondenza.
Le posizioni partono da 0 e sono misurate in unità di codice UTF-16, nel modo in cui JavaScript conta la lunghezza delle stringhe, quindi un’emoji di solito conta come due. I gruppi con nome come (?<year>\d{4}) sono elencati per numero, nell’ordine in cui compaiono le loro parentesi di apertura.
La ricerca viene eseguita in un worker separato e si interrompe dopo mezzo secondo. Un pattern con ripetizioni annidate come ^(a+)+$ può richiedere un tempo esponenzialmente più lungo su un testo che quasi corrisponde, un fenomeno noto come backtracking catastrofico; invece di bloccare la pagina, lo strumento si ferma e mostra il messaggio «La valutazione dell’espressione ha richiesto troppo tempo». Vengono elencate e contate solo le prime 200 corrispondenze, il pattern può avere al massimo 500 caratteri e il testo fino a 100.000 caratteri.
Il motore è quello del tuo browser. Di solito i pattern funzionano anche in altri linguaggi, ma non sempre: Python scrive i gruppi con nome come (?P<name>…), PCRE e Java hanno quantificatori possessivi e gruppi atomici che JavaScript non ha, e un flag (?i) all’inizio di un pattern non è valido in JavaScript (i browser recenti accettano solo la forma circoscritta (?i:…)). Prova il pattern nel linguaggio di destinazione prima di farci affidamento.
Esempio
Trova due corrispondenze simili a email. Il risultato mostra testo, posizione iniziale e gruppi catturati.
\b[a-z]+@([a-z0-9-]+\.)+[a-z]{2,}\b · flag: giSul testo di esempio: [email protected] alla posizione 9 e [email protected] alla 35. Il gruppo 1 contiene l’ultima ripetizione del suo gruppo, example. e ntools., non l’intero dominio.^(?<key>[^=]+)=(?<value>.*)$ · flag: gmSulle righe name=Ana e city=Porto: due corrispondenze, con i gruppi name e Ana, poi city e Porto. Senza m non c’è alcuna corrispondenza, perché allora ^ e $ si riferiscono all’intero testo.(\d{4})-(\d{2})-(\d{2}) · flag: gSu 2026-10-02 e 2027-03-01: due corrispondenze, ciascuna suddivisa in anno, mese e giorno.colou?r · flag: giTrova sia Color sia colour: il ? rende facoltativa la u, e i ignora la C maiuscola.
Domande frequenti
Le espressioni sono compatibili con tutti i linguaggi?
No. Usano il motore RegExp di JavaScript; funzionalità ed escape possono essere diversi in Python, PHP, Java o altri motori.
Perché il mio pattern trova una sola corrispondenza?
Aggiungi il flag g. Senza di esso, un’espressione regolare si ferma alla prima corrispondenza.
Perché ^ e $ non corrispondono su ogni riga?
Per impostazione predefinita indicano l’inizio e la fine dell’intero testo. Il flag m li fa funzionare riga per riga.
Che cosa significa «La valutazione dell’espressione ha richiesto troppo tempo»?
La ricerca ha richiesto più di mezzo secondo, di solito a causa di ripetizioni annidate come (a+)+ o (.*)*. Rendi più specifiche le parti ripetute, ad esempio [^,]* invece di .*, così il motore ha meno modi di tentare una corrispondenza.