DevBox Strumenti veloci per sviluppatori, senza registrazione

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."

    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.