Tester di Espressioni Regolari
Scrivi un pattern e un testo di prova — le corrispondenze si evidenziano mentre digiti. Il pattern e i flag si sincronizzano con l'URL per la condivisione; il tuo testo di prova mai.
Risultato evidenziato
Corrispondenze (0)
Prova espressioni regolari JavaScript su testo reale
Questo strumento compila un RegExp nativo a partire
dal tuo pattern e dai tuoi flag, dentro un try/catch così che un pattern rotto
mostri un errore in linguaggio semplice invece di una pagina
vuota. Poi lo esegue sul tuo testo di prova esattamente come
farebbe il tuo codice — matchAll() quando il flag
global è selezionato, raccogliendo ogni corrispondenza, oppure
un singolo match() quando non lo è. Ogni
corrispondenza viene evidenziata al suo posto tagliando la
stringa originale attorno a match.index e match[0].length e avvolgendo quel frammento in un
elemento <mark> — mai cercando e sostituendo
sulla stringa, cosa che si rompe non appena il testo di prova
contiene gli stessi caratteri che si stanno cercando. Ogni
corrispondenza viene anche elencata sotto con la sua posizione e
il testo catturato da qualunque gruppo tra parentesi.
Esempio pratico
Pattern: (\w+)@(\w+)\.com, flag gu, contro "Scrivi a maria@example.com o a luca@test.com per aiuto."
-
Corrispondenza 1 all'indice 9:
maria@example.com— Gruppo 1:maria· Gruppo 2:example -
Corrispondenza 2 all'indice 30:
luca@test.com— Gruppo 1:luca· Gruppo 2:test
Due corrispondenze, perché il flag global è attivo — deselezionalo
e lo strumento si ferma dopo la prima, "maria@example.com",
proprio come farebbe String.prototype.match() senza
il flag g.
Domande frequenti
Perché il mio pattern non funziona su più righe?
Due flag distinti di JavaScript riguardano il testo su più righe, ed è facile usare quello sbagliato. m (multiline) cambia il significato di ^ e $ — attivato, corrispondono all'inizio/fine di ogni riga invece che solo all'inizio/fine dell'intera stringa. s (dotAll) cambia cosa corrisponde al punto — attivato, il . corrisponde anche agli a-capo, non solo a "qualsiasi carattere che non sia un a-capo". Un pattern che deve attraversare più righe con .* di solito ha bisogno di s; un pattern che ancora ogni riga con ^ o $ di solito ha bisogno di m. Sono indipendenti, e alcuni pattern richiedono entrambi.
Cosa fa esattamente ogni flag?
g (global) restituisce tutte le corrispondenze nella stringa invece di fermarsi alla prima. i (ignoreCase) rende la corrispondenza indipendente da maiuscole/minuscole. m (multiline) fa sì che ^ e $ corrispondano ai confini di riga, non solo a inizio e fine stringa. s (dotAll) fa sì che il . corrisponda anche agli a-capo. u (unicode) tratta il pattern come punti di codice Unicode invece che come unità di codice a 16 bit, il che corregge la corrispondenza per i caratteri fuori dal Basic Multilingual Plane — la maggior parte delle emoji, per esempio — e abilita gli escape di proprietà Unicode come \p{Letter}.
È esattamente la stessa sintassi regex che userei in Python, PHP o grep?
No — questo strumento costruisce un vero RegExp di JavaScript, quindi si comporta esattamente come farebbe JS, e il regex di JS è un dialetto a sé. Il PCRE (usato da PHP, e su cui si basano molti altri strumenti) supporta costrutti che a JS mancano in alcune versioni del motore, come i gruppi atomici e i quantificatori possessivi; JavaScript, a sua volta, ha funzionalità proprie, come i gruppi di cattura con nome (?<nome>...) e i lookbehind, che le build PCRE più vecchie non supportano. Se il pattern è destinato a un altro linguaggio o strumento, testalo anche lì invece di dare per scontato che una corrispondenza qui sia universale.
Come leggo i gruppi di cattura nei risultati?
Ogni coppia di parentesi nel tuo pattern cattura il testo che vi ha trovato corrispondenza al suo interno, numerato da sinistra a destra a partire da 1 (il gruppo 0, non mostrato separatamente qui, è sempre la corrispondenza completa). Per (\w+)@(\w+)\.com contro "maria@example.com", il gruppo 1 cattura "maria" e il gruppo 2 cattura "example" — utile per estrarre uno username o un dominio da una corrispondenza più ampia senza un secondo passaggio. Un gruppo che fa parte del pattern ma non ha partecipato a una corrispondenza specifica — dentro un'alternanza che ha preso l'altro ramo, per esempio — viene mostrato come non corrispondente invece che come stringa vuota, e questo strumento segnala esplicitamente la differenza.