Banco di prova per le espressioni regolari
Inserendo un'espressione regolare e un testo di prova, evidenzia le corrispondenze ed elenca i valori dei gruppi di cattura. Prevede i contrassegni g, i, m, s e u e si serve direttamente dell'oggetto RegExp di JavaScript.
Le espressioni regolari più usate
| Scopo | Espressione | Descrizione |
|---|---|---|
| Indirizzo di posta elettronica | ^[\w.+-]+@[\w-]+\.[\w.-]+$ | Convalida in modo semplificato la forma di un indirizzo, con nome utente e dominio ai due lati della chiocciola; non è pienamente conforme alla norma. |
| Numero di telefono | ^0\d{1,4}-\d{1,4}-\d{4}$ | Corrisponde ai numeri fissi e mobili separati da trattini, per esempio 03-1234-5678 oppure 090-1234-5678. |
| Indirizzo web | https?:\/\/[\w.-]+(?:\/[\w\-./?%&=]*)? | Estrae gli indirizzi che cominciano con http:// oppure https://, compresi percorsi e parametri di interrogazione. |
| Codice postale | ^\d{3}-\d{4}$ | Corrisponde ai codici postali nella forma di tre cifre, un trattino e quattro cifre, come 123-4567. |
| Codice di colore esadecimale | ^#([0-9a-fA-F]{6}|[0-9a-fA-F]{3})$ | Corrisponde ai codici di colore dei fogli di stile, nella forma completa a sei cifre o in quella abbreviata a tre. |
| Sole cifre | ^[0-9]+$ | Verifica che l'intera stringa sia composta soltanto di cifre da 0 a 9. |
Che cos'è un banco di prova per le espressioni regolari
Un'espressione regolare (regex) è un linguaggio minimo e compatto per cercare, estrarre e convalidare schemi all'interno di un testo. Compiti come «verificare se questo assomiglia a un indirizzo di posta valido» oppure «estrarre soltanto gli indirizzi IP da un file di registro» si possono esprimere con un'unica espressione. Lo svantaggio è che la sintassi è densa e ricca di simboli, per cui è davvero difficile capire, dalla sola lettura, se un'espressione si comporterà come previsto.
Questo strumento valuta in tempo reale l'espressione e il testo di prova digitati usando il motore RegExp nativo di JavaScript, evidenziando in giallo ogni corrispondenza direttamente nel testo. Elenca inoltre il valore di ciascun gruppo di cattura, il numero totale di corrispondenze ed eventuali errori di sintassi, così da poter affinare un'espressione per tentativi successivi — modificarla, osservare che cosa cambia, modificarla ancora — interamente nel navigatore, senza scrivere codice né predisporre un ambiente di esecuzione.
Poiché tutto avviene lato client con lo stesso identico motore che gestisce le espressioni regolari nel JavaScript del navigatore, nella convalida dei moduli e nei servizi Node.js, quanto si osserva qui è un'anteprima fedele del comportamento che l'espressione avrà una volta portata in produzione. È un modo rapido per verificare un'espressione complessa prima di incollarla in codice reale.
Come usare il banco di prova per le espressioni regolari
-
Digitare l'espressione regolare
Inserite nel campo in alto l'espressione da provare. Le barre che la racchiudono
/ /vengono aggiunte automaticamente: basta digitare il corpo dell'espressione. - Scegliere i contrassegni necessari Attivate le caselle g, i, m, s e u secondo le esigenze. Lasciate attivo il contrassegno g se volete vedere tutte le corrispondenze e non soltanto la prima.
- Incollare un testo di prova Incollate o digitate nell'area di testo sottostante il testo su cui cercare le corrispondenze. Il testo su più righe è pienamente supportato.
- Osservare l'evidenziazione e la tabella Il risultato viene ricalcolato automaticamente mentre si digita. Le sottostringhe corrispondenti vengono evidenziate in giallo, e la tabella sottostante elenca, per ogni occorrenza, la corrispondenza completa e il valore di ciascun gruppo di cattura.
- Affinare l'espressione Se il numero di corrispondenze o l'intervallo trovato non corrisponde alle attese, modificate direttamente l'espressione o i contrassegni osservando come cambia il risultato evidenziato.
Consigli per sfruttarlo al meglio
- La dicitura
/contrassegnimostrata a destra del campo permette di vedere a colpo d'occhio quali contrassegni siano attivi. - I gruppi di cattura riguardano soltanto le parti racchiuse fra
(). Se volete raggruppare senza catturare, usate(?:...): l'elenco dei gruppi resterà più pulito. - Senza il contrassegno globale si ottiene la sola prima corrispondenza. Per contare tutte le occorrenze, attivatelo sempre.
- Il pulsante degli esempi carica un caso pratico di estrazione di indirizzi di posta: è un buon punto di partenza per osservare il comportamento dei gruppi di cattura.
- L'elaborazione avviene interamente nel navigatore e né l'espressione né il testo di prova sono mai trasmessi ad alcun servente.
Impieghi tipici di un banco di prova per le espressioni regolari
Progettare le regole di convalida di un modulo
Verificate qui un'espressione regolare prima di collegarla a un modulo: confermate che gli ingressi previsti (con o senza trattino, con lettere accentate e simili) vengano accettati e che quelli malformati vengano correttamente respinti.
Estrarre campi dai registri del servente
Incollate un frammento reale di un registro di accesso o di errore e costruite un'espressione che estragga soltanto i campi necessari, come indirizzi IP, marche temporali o codici di stato HTTP.
Ripulire dati CSV o testo libero
Prima di uniformare numeri di telefono o date scritti in modo incoerente, usate lo strumento per classificare quali righe corrispondono a un determinato schema e quali no.
Verificare il comportamento durante una revisione del codice
Quando l'espressione regolare di un collega non è chiara a un primo sguardo, incollate valori di esempio reali e visualizzate esattamente che cosa corrisponde, così da risolvere subito il dubbio.
Controllare gli effetti collaterali di una modifica
Quando modificate un'espressione regolare già in uso, confrontate le corrispondenze evidenziate prima e dopo la modifica sullo stesso testo di prova, per verificare che il comportamento non sia cambiato in modo inatteso.
Glossario delle espressioni regolari
- Gruppo di cattura
- La parte di un'espressione racchiusa fra
(). Si usa quando serve estrarre una porzione della corrispondenza generale anziché l'intera stringa corrisposta. La tabella dei risultati di questo strumento elenca il valore di ciascun gruppo come Gruppo 1, Gruppo 2 e così via. - Gruppo non catturante
- Un gruppo scritto nella forma
(?:...). Si usa quando le parentesi servono soltanto a raggruppare una condizione: mantiene ordinata la numerazione dei gruppi di cattura veri e propri e rende più leggero l'elenco dei risultati. - Riferimento a ritroso
- Un modo per riutilizzare, più avanti nella stessa espressione, il testo già corrisposto da un gruppo di cattura precedente. I gruppi numerati si richiamano con
\1, quelli con nome con\k<nome>. Si usa spesso per individuare parole ripetute o elementi duplicati. - Corrispondenza pigra (non avida)
- Aggiungere
?subito dopo un quantificatore (come*o+) fa sì che corrisponda alla minor quantità di testo possibile. Per impostazione predefinita (corrispondenza avida) i quantificatori cercano di corrispondere alla maggior quantità possibile: la differenza conta quando si vuole estrarre qualcosa di circoscritto, come il contenuto di un singolo elemento HTML. - Asserzioni in avanti e all'indietro
- Termine collettivo per
(?=...)(asserzione positiva in avanti),(?!...)(asserzione negativa in avanti),(?<=...)(asserzione positiva all'indietro) e(?<!...)(asserzione negativa all'indietro). Permettono di richiedere che un certo testo sia presente nelle vicinanze senza includerlo nella corrispondenza vera e propria. - Classe di caratteri
- Un insieme di caratteri racchiuso fra parentesi quadre, come
[abc]o[a-z0-9], che corrisponde a un singolo carattere qualunque al suo interno. Anteponendo^subito dopo la parentesi di apertura, come in[^abc], il significato si inverte in «qualsiasi carattere tranne questi». - Ancora
- Un elemento che indica una posizione anziché un carattere effettivo.
^si àncora all'inizio della stringa (o di ciascuna riga con il contrassegno m),$alla fine, e\ba un confine di parola. - Contrassegno
- Un'opzione che cambia il modo in cui l'intera espressione viene interpretata. Questo strumento supporta i cinque contrassegni di JavaScript: g (trova tutte le corrispondenze), i (ignora maiuscole e minuscole), m (multiriga), s (il punto corrisponde anche ai ritorni a capo) e u (gestione corretta di Unicode).
Domande frequenti
[abc], \d, +, * — è quasi sempre la stessa, ma la notazione dei gruppi con nome, il sostegno delle asserzioni in avanti e all'indietro e i contrassegni disponibili variano nel dettaglio da un linguaggio all'altro. Questo strumento si attiene alla specifica di JavaScript e non garantisce il funzionamento altrove.*, + o ? privo di elemento a cui applicarsi, una classe di caratteri malformata. Il messaggio contiene qualche indizio: verificate la corrispondenza delle parentesi e la protezione dei caratteri speciali, come \. oppure \(.
A proposito — che cosa accade dentro un motore di espressioni regolari
Le espressioni regolari discendono dalla teoria dei linguaggi regolari proposta negli anni Cinquanta dal matematico Stephen Kleene. Le prime realizzazioni comparvero nei programmi di scrittura dei sistemi UNIX e nel comando grep, il cui nome è l'acronimo di «cerca globalmente un'espressione regolare e stampa»: da lì si diffusero rapidamente come strumento pratico per il trattamento dei testi. È significativo che il nome stesso di quel comando derivi dall'operazione sulle espressioni regolari.
Il motore di JavaScript esegue la ricerca con la strategia del ritorno all'indietro: prova in ordine ciascun elemento dell'espressione e, in caso di insuccesso, torna di un passo e riprova. È un metodo duttile ma, con espressioni come (a+)+b e stringhe lunghe che non corrispondono, il numero di tentativi cresce in modo esponenziale — il cosiddetto ritorno all'indietro catastrofico — fino a bloccare navigatore o servente. Prima di usare espressioni complesse in produzione è indispensabile provarle con ingressi di ogni genere.
Un oggetto con il contrassegno globale conserva al proprio interno la posizione del cursore e, a ogni chiamata del metodo di esecuzione, riprende la ricerca da lì. Riutilizzando lo stesso oggetto quel cursore può restare inavvertitamente dove si trovava: questo strumento crea perciò ogni volta una nuova istanza, evitando che uno stato indesiderato si trascini da un'esecuzione all'altra.
I gruppi di cattura con nome, nella forma (?<nome>...), sono una funzione relativamente recente, aggiunta nell'edizione 2018 dello standard del linguaggio. Potendo richiamare un gruppo per nome anziché per numero, la leggibilità migliora tanto più quanto l'espressione si complica: sono particolarmente utili là dove conta sapere che cosa rappresenti ciascun gruppo, come nell'analisi delle date.