Tester di regex
Testa le espressioni regolari JavaScript in tempo reale con corrispondenze evidenziate, gruppi di cattura, sostituzione e spiegazione di ogni token.
| # | Posizione | Corrispondenza | Gruppi |
|---|
Spiegazione del pattern
Attenzione: un gruppo ripetuto contiene un altro quantificatore illimitato, per esempio (a+)+. Pattern del genere possono richiedere un tempo esponenziale su un testo che corrisponde quasi (catastrophic backtracking).
Come usare il tester di regex
- Scrivi il pattern in Espressione regolare, senza le barre che lo racchiudono. Le barre e i flag attivi compaiono intorno al campo, come in
/pattern/g. - Spunta i Flag che ti servono:
g(global),i(ignora maiuscole/minuscole),m(multiline),s(dotAll),u(unicode) oy(sticky). - Incolla il testo in cui cercare in Testo di prova. Le corrispondenze vengono evidenziate mentre scrivi e la tabella elenca ciascuna con la sua posizione e i gruppi di cattura.
- Per provare una sostituzione, compila Sostituzione. Il riquadro Risultato dopo la sostituzione mostra il testo con ogni corrispondenza sostituita, pronto da copiare.
- Leggi la Spiegazione del pattern per verificare cosa fa ogni parte della tua regex. Non sai da dove partire? Premi Carica un esempio.
Cosa mostra il tester
- Corrispondenze evidenziate: ogni corrispondenza nel testo di prova è marcata, così vedi a colpo d’occhio cosa viene preso e cosa sfugge.
- Tabella delle corrispondenze: il numero di ogni corrispondenza, la sua posizione (scostamento in caratteri dall’inizio, contando da 0), il testo trovato e il valore di ogni gruppo di cattura. I gruppi con nome come
(?<anno>\d{4})compaiono con il loro nome, e i gruppi che non hanno partecipato alla corrispondenza sono indicati come “(non trovato)”. Vengono elencate le prime 1.000 corrispondenze. - Sostituzione: il testo di sostituzione usa la sintassi JavaScript:
$1o$2per i gruppi numerati,$<name>per i gruppi con nome,$&per l’intera corrispondenza e$$per un simbolo del dollaro letterale. Senza il flaggviene sostituita solo la prima corrispondenza. - Spiegazione: il pattern viene diviso in token (testo letterale, classi di caratteri, ancore, gruppi, quantificatori, lookaround, riferimenti all’indietro), ognuno con una breve descrizione. I gruppi annidati sono rientrati, il che rende molto più semplice rivedere i pattern lunghi.
I flag in breve
| Flag | Effetto |
|---|---|
g |
Trova tutte le corrispondenze invece di fermarsi alla prima |
i |
Ignora la differenza tra maiuscole e minuscole |
m |
^ e $ corrispondono all’inizio e alla fine di ogni riga |
s |
. riconosce anche gli a capo |
u |
Modalità Unicode completa: \u{…}, \p{…} ed emoji trattati come caratteri singoli |
y |
Sticky: ogni corrispondenza deve iniziare esattamente dove è finita la precedente |
Il flag i funziona anche con le lettere accentate: perché trova anche PERCHÉ. Per riconoscere qualsiasi lettera, accenti compresi, usa \p{L} con il flag u, perché \w copre solo le lettere senza accento, le cifre e il trattino basso.
Catastrophic backtracking
Alcuni pattern richiedono un tempo esponenziale su un testo che corrisponde quasi. L’esempio classico è (a+)+$ provato su una lunga serie di a seguita da una b: il motore prova tutti i modi di dividere le a tra i due quantificatori prima di arrendersi. Questo problema, noto come ReDoS, ha messo fuori uso siti web reali.
Lo strumento protegge il tuo browser in tre modi. La ricerca avviene in un worker in background che viene fermato dopo 1,5 secondi; il testo di prova è limitato a 100.000 caratteri; e la spiegazione ti avvisa quando un gruppo ripetuto contiene un altro quantificatore illimitato. Quando un pattern va in timeout, riscrivilo in modo che ogni carattere possa essere riconosciuto in un solo modo, per esempio a+$ invece di (a+)+$.
Domande frequenti
Quale dialetto di regex usa questo strumento?
Usa il motore JavaScript (ECMAScript) del tuo browser, esattamente come farebbero new RegExp() e String.prototype.replace() nel tuo codice. Gran parte della sintassi è condivisa con PCRE, Python e Java, ma alcune funzioni differiscono: quantificatori possessivi e gruppi atomici non esistono in JavaScript, mentre il lookbehind è supportato in tutti i browser attuali.
Perché il mio pattern trova una sola corrispondenza?
Il flag g è disattivato. Senza di esso, JavaScript si ferma alla prima corrispondenza e la sostituzione modifica solo quella.
Come riconosco un punto, una parentesi o un punto interrogativo letterale?
Mettici davanti un backslash: \., \[, \?. La spiegazione indica i caratteri con escape con “(con escape)”, così puoi controllare.
Il mio testo viene inviato da qualche parte?
No. Il pattern e il testo vengono elaborati solo nel tuo browser, il che rende lo strumento sicuro anche per file di log o dati che contengono informazioni personali.
Perché la posizione è diversa dalla colonna del mio editor?
Le posizioni contano i caratteri da 0, su tutte le righe, come fa match.index in JavaScript. Gli a capo contano come un carattere e un’emoji fuori dal Basic Multilingual Plane conta come due.
Strumenti correlati
- Formattatore e validatore JSON Formattatore e validatore JSON gratuito che formatta, minifica e controlla il JSON nel browser, con gli errori di sintassi indicati per riga e colonna.
- Codifica e decodifica URL Codificatore e decodificatore URL gratuito. Codifica parametri o URL completi, decodifica le sequenze %XX e gestisci + come spazio, tutto nel browser.
- Generatore di hash Genera hash MD5, SHA-1, SHA-256 e SHA-512 di testi o file di qualsiasi dimensione e verifica i checksum. Tutto avviene nel tuo browser.