Come usare il tester di espressioni regolari
Un'espressione regolare (regex) è una sintassi compatta per descrivere regole di corrispondenza del testo. Si usa ovunque: validazione di form, estrazione da log, sostituzioni in blocco, pulizia dei dati. Ma la regex è densa: un carattere sbagliato e il significato cambia del tutto. Uno strumento che mostra le corrispondenze mentre digitate fa risparmiare moltissimo tempo.
Cosa offre questo strumento
- Evidenziazione dal vivo: mentre digitate il pattern, ogni corrispondenza nel testo di prova viene marcata — nessun pulsante da premere
- Elenco delle corrispondenze: ogni frammento trovato e la sua posizione elencati separatamente, facili da verificare
- Gruppi di cattura: le sottostringhe catturate dalle parentesi sono evidenziate in colori diversi, così potete controllare che il raggruppamento sia quello voluto
- Segnalazione degli errori: con una sintassi errata vi dice di che tipo di errore si tratta (per esempio una parentesi non chiusa), invece di fallire in silenzio
- Promemoria: cliccate un pattern comune (numero di telefono, email, codice identificativo e così via) per inserirlo, risparmiando di scriverlo e memorizzarlo
Cosa significano i cinque flag più comuni
gglobal: trova tutte le corrispondenze invece di fermarsi alla prima. Conviene tenerlo attivo durante le prove.iignora maiuscole/minuscole:/abc/itrovaABCeAbc.mmultilinea: fa sì che^e$corrispondano all'inizio e alla fine di ogni riga invece che dell'intero testo. Essenziale per la validazione riga per riga.sil punto corrisponde al ritorno a capo: di default.non corrisponde a un ritorno a capo; attivandolo,.corrisponde a qualsiasi carattere, compresi i ritorni a capo.umodalità Unicode: gestisce correttamente i caratteri a quattro byte, come emoji e ideogrammi rari. Se il testo di prova contiene emoji e i risultati sembrano sbagliati, provate ad attivarlo.
Alcune trappole in cui si cade
Quantificatori greedy. .* è greedy per impostazione predefinita e cattura il massimo possibile. Confrontare <a><b> con <.*> restituisce l'intera stringa invece di due tag. Cambiatelo in <.*?> (il punto interrogativo lo rende lazy) per il comportamento che volete davvero.
Ancore e multilinea. Nella modalità predefinita ^\d+$ corrisponde solo se l'intero testo è un unico numero. Per validare riga per riga dovete attivare m.
Dimenticare l'escaping. Scrivere una regex dentro una stringa JavaScript significa raddoppiare i backslash: un pattern per il telefono diventa "^1[3-9]\\d{9}$". Il campo di input qui accetta un letterale regex, quindi un singolo backslash come in \d è corretto.
La validazione dei form richiede ancore. Scrivendo solo [0-9]{11} troverete un «numero di telefono» anche dentro abc13800000000xyz. Per la validazione dovete delimitarlo con ^...$ dall'inizio alla fine.
Una nota sulle prestazioni
Alcuni pattern innescano il backtracking catastrofico. Per esempio (a+)+b su una lunga sequenza di aaaa... può impiegare un tempo esponenzialmente maggiore e bloccare il browser. Se la pagina smette di rispondere, il colpevole è di solito un quantificatore annidato: riscrivetelo in forma più precisa, come a+b.
Domande frequenti
Posso usare in produzione i pattern del promemoria?
Sì, ma adattateli secondo necessità. La regola del numero di telefono cambia con la politica di numerazione e va aggiornata quando vengono assegnati nuovi prefissi. Il pattern completo del codice identificativo valida solo il formato e la plausibilità della data: non verifica l'ultima cifra di controllo. E l'email è una semplificazione pratica che copre la stragrande maggioranza dei casi; un pattern rigorosamente conforme a RFC 5322 è molto più complicato e di solito non vale la pena.
Perché la mia regex funziona in un altro linguaggio ma non qui?
Questo strumento usa il motore regex di JavaScript, la cui sintassi differisce da PCRE (PHP, il modulo re di Python). Tre differenze tipiche: JavaScript manca di parte della sintassi estesa oltre a (?<name>), non ha condizionali né ricorsione, e non ha le ancore \A / \z (usate ^ e $). I gruppi con nome (?<name>...) sono supportati.
Come faccio a trovare contenuti che attraversano i ritorni a capo?
In due modi: sostituite . con [\s\S], oppure attivate il flag s. Il primo è più portabile e funziona praticamente in ogni motore.
Il testo di prova viene salvato?
No. Tutto il confronto avviene nella memoria del browser e si cancella al ricaricamento della pagina. Nulla viene caricato.