Diagramma railroad delle regex
Trasforma un'espressione regolare JavaScript in un chiaro diagramma railroad con gruppi, alternative, cicli e lookaround, ed esportalo in SVG o PNG.
Flag: qualsiasi tra d g i m s u v y. Puoi anche incollare un letterale come /\d+/g.
- Gruppi di cattura
- –
- Alternative
- –
- Quantificatori
- –
Diagramma railroad
Blu: testo letterale. Verde: tipi e insiemi di caratteri (rosso: insieme escluso). Viola: ancore e confini. Arancione: riferimenti all'indietro. Riquadri tratteggiati: gruppi e lookaround. Un percorso sopra un elemento lo salta, un percorso sotto lo ripete.
Come visualizzare un’espressione regolare
- Scrivi o incolla il pattern in Espressione regolare. Puoi anche incollare un letterale JavaScript completo come
/^\d{3}-\d{4}$/gm: le barre vengono rimosse e i flag finiscono automaticamente nella casella dei flag. - Aggiungi i flag se ti servono (qualsiasi tra
d g i m s u v y). I flag cambiano il modo in cui alcune parti vengono disegnate: conm,^e$diventano “inizio della riga” e “fine della riga”; cons, il punto diventa “qualsiasi carattere”. - Il diagramma si aggiorna mentre scrivi. Disegna diagramma lo ridisegna su richiesta ed Esempio successivo scorre alcuni pattern comuni (email, numero di telefono, colore esadecimale, prezzo, tag HTML, URL).
- Leggi il diagramma da sinistra a destra, dal pallino pieno al pallino cerchiato. Ogni percorso che puoi seguire è una stringa che il pattern può riconoscere.
- Usa Scarica SVG per un’immagine vettoriale nitida (documentazione, slide), Scarica PNG per un’immagine a risoluzione doppia, oppure Copia codice SVG per incollare il markup in una pagina web.
Passa il mouse su un riquadro per vedere da quale parte del pattern deriva e la sua posizione.
Come si legge un diagramma railroad
I diagrammi railroad, detti anche diagrammi sintattici, descrivono una grammatica come un insieme di binari. Un’espressione regolare è proprio una grammatica di questo tipo, quindi il disegno ne mostra la struttura molto meglio di una fitta riga di simboli:
- I riquadri blu sono testo letterale che deve comparire esattamente com’è scritto, per esempio
“@”. - I riquadri verdi sono tipi di carattere (
\dcifra,\wcarattere di parola,.qualsiasi carattere…) e classi di caratteri. Una classe come[\w.+-]diventa un riquadro intitolato “uno tra” che elenca ogni elemento; una classe negata[^…]è rossa e intitolata “nessuno tra”. - Le pillole viola sono ancore e confini: inizio e fine del testo o della riga,
\bconfine di parola. Corrispondono a una posizione, non a un carattere. - I riquadri tratteggiati arancioni sono riferimenti all’indietro come
\1o\k<name>: lo stesso testo catturato prima da un gruppo. - Le cornici tratteggiate sono gruppi. I gruppi di cattura sono numerati nell’ordine della loro parentesi di apertura (“gruppo #2 “dominio””); i gruppi non di cattura
(?:…)non hanno cornice. Lookahead e lookbehind hanno una cornice rosa con l’etichetta “seguito da” o “preceduto da”, perché controllano il testo senza consumarlo. - I binari paralleli sono alternative separate da
|. - Un binario sopra un elemento permette di saltarlo (
?,*,{0,n}). Un binario sotto con una freccia torna indietro per ripeterlo (+,*,{n,m}). I conteggi diversi da quelli soliti sono scritti sotto il ciclo, come “da 2 a 5 volte”, e i quantificatori lazy (+?,*?) sono contrassegnati con “lazy”.
Messaggi di errore con la posizione
Il pattern viene controllato dal motore di espressioni regolari JavaScript del tuo browser, quindi ciò che lo strumento accetta è esattamente ciò che accetta new RegExp() con gli stessi flag. Quando il motore lo rifiuta, lo strumento indica il carattere colpevole con la sua posizione e un accento circonflesso sotto il pattern. Riconosce una ) senza corrispondenza, un gruppo mai chiuso, una classe di caratteri senza la sua ], un quantificatore senza niente da ripetere (*a, a|+), un backslash isolato alla fine e quantificatori {n,m} in cui n è maggiore di m. Gli altri errori, come un riferimento a un nome di gruppo inesistente, vengono mostrati con il messaggio del browser.
L’espressione viene solo compilata per validarla: non viene mai eseguita su un testo e niente lascia il tuo browser.
Domande frequenti
Quale dialetto di regex supporta questo strumento?
Le espressioni regolari JavaScript (ECMAScript), compresi i gruppi con nome, il lookbehind, le proprietà Unicode \p{…} e il flag v con classi annidate. Anche i pattern di PCRE, Python o Java di solito funzionano, ma la sintassi specifica di quei motori, come i quantificatori possessivi o (?P<name>…), viene rifiutata perché il browser non la supporta.
Perché il mio gruppo non di cattura non è disegnato come riquadro?
Un gruppo come (?:\.[\w-]+) serve solo a raggruppare elementi, così che un quantificatore o un’alternativa si applichi a tutti. Non crea alcuna cattura, quindi il diagramma mostra il suo contenuto e il suo ciclo senza cornice, per mantenere il disegno leggibile. I gruppi con flag inline hanno invece una cornice con l’etichetta dei flag.
Che differenza c'è tra il binario di salto e il ciclo?
Il binario sopra un elemento significa “zero volte è ammesso”, quello sotto significa “può essere ripetuto”. ? ha solo il binario superiore, + solo quello inferiore e * li ha entrambi. Per un quantificatore come {2,4}, il ciclo porta l’etichetta “da 2 a 4 volte”.
Posso usare il diagramma nella mia documentazione?
Sì. L’esportazione SVG è un file vettoriale autonomo con sfondo bianco e linee scure, ideale per README, wiki e slide. L’esportazione PNG è renderizzata al doppio delle dimensioni del disegno a schermo, per una resa nitida sugli schermi ad alta densità.
C'è un limite di lunghezza?
I pattern possono arrivare a 5.000 caratteri. Le espressioni molto lunghe producono un diagramma largo che puoi scorrere in orizzontale; dividerle in parti con nome spesso rende più facile da mantenere sia il diagramma sia la regex.
Strumenti correlati
- Tester di regex Testa le espressioni regolari JavaScript in tempo reale con corrispondenze evidenziate, gruppi di cattura, sostituzione e spiegazione di ogni token.
- AST Explorer JavaScript Incolla codice JavaScript ed esplora il suo albero sintattico astratto (ESTree, generato da Acorn) nel browser. Clicca sui nodi ed esporta l'AST in JSON.
- 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.