RevealTheme logo

Tester di espressioni regolari

Prova le espressioni regolari di JavaScript su qualsiasi input. Visualizza le corrispondenze, i gruppi e le sostituzioni in tempo reale.

0 corrispondenza/e

Come usare questo strumento

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

Che cosa sono le espressioni regolari e come si leggono?

Le espressioni regolari (regex) sono un piccolo linguaggio specifico di dominio per cercare schemi nel testo. Ogni linguaggio di programmazione moderno ha un motore regex; questo strumento usa il RegExp nativo di JavaScript, che segue la specifica ECMAScript 2018+ e supporta funzioni moderne come le asserzioni lookbehind, i gruppi di cattura con nome, gli escape delle proprietà Unicode e il flag dotAll. I blocchi fondamentali: i caratteri letterali corrispondono a se stessi (la regex 'gatto' corrisponde alla parola gatto); le classi di caratteri corrispondono a uno qualsiasi di un insieme ('[a-z]' corrisponde alle lettere minuscole); i quantificatori controllano la ripetizione (* zero o più, + uno o più, ? zero o uno, {3,5} tra 3 e 5); le ancore corrispondono a posizioni (^ inizio della stringa, $ fine, \b confine di parola); i gruppi catturano sottocorrispondenze ((gatto|cane) corrisponde a uno dei due, catturando quale); l'alternanza offre una scelta. La regex eccelle nell'analisi di testo strutturato ma non grammaticale (log, email, numeri di telefono, semplici attributi HTML) e fallisce con strutture genuinamente ricorsive (HTML completo, JSON annidato). Per queste, usi un parser. Questo tester le consente di iterare su uno schema con feedback istantaneo: modifica la regex e le corrispondenze vengono ricalcolate a ogni battitura.

Casi d'uso comuni

  • Convalida il formato dell'input dell'utente (e-mail, numeri di telefono, codici postali) prima di inviarlo al tuo server.

  • Estrai dati strutturati dai file di log (timestamp, IP, codici di stato, percorsi delle richieste).

  • Cerca e sostituisci in centinaia di file usando la ricerca con regex del tuo editor.

  • Scrivi regole di riscrittura degli URL per Nginx, il file .htaccess di Apache o le riscritture di Vercel.

  • Analizza semplici formati simili al CSV in cui un vero parser sarebbe eccessivo.

  • Crea pattern di validazione dei moduli per l'attributo pattern di <input> in HTML.

Domande frequenti

Quali flag sono supportati?
g (global: trova tutte le corrispondenze, non solo la prima), i (senza distinzione tra maiuscole e minuscole), m (multiline: ^ e $ corrispondono ai ritorni a capo), s (dotAll: . corrisponde ai ritorni a capo), u (unicode: gestione corretta dei caratteri multibyte), y (sticky: corrisponde solo in lastIndex). Combini i flag concatenandoli: 'gim' abilita global + senza distinzione tra maiuscole e minuscole + multiline.
Come faccio a trovare corrispondenze su più righe?
Due esigenze distinte: 'm' fa sì che ^ e $ corrispondano ai ritorni a capo (tratta ogni riga come una stringa separata per le ancore). 's' fa sì che . corrisponda ai ritorni a capo (altrimenti . corrisponde a tutto tranne i ritorni a capo). Usi entrambi insieme se ha bisogno di trovare corrispondenze con schemi che si estendono su più righe.
Qual è la differenza tra quantificatori greedy e lazy?
I quantificatori greedy (*, +, {n,m}) corrispondono al massimo possibile. Quelli lazy (*?, +?, {n,m}?) corrispondono al minimo possibile. L'esempio classico: la regex '<.*>' su '<a><b>' corrisponde a tutto '<a><b>'; '<.*?>' corrisponde solo a '<a>'.
Quando NON dovrei usare la regex?
Quando la struttura è genuinamente ricorsiva (HTML, JSON, parentesi bilanciate). Quando ha bisogno di gestire correttamente ogni caso limite (analizzare date con fusi orari, nomi con apostrofi). Quando la grammatica dell'input è ben definita ed esiste una libreria di analisi. Famosa risposta su Stack Overflow: la regex è ottima per trovare schemi, pessima per analizzare linguaggi.
Che cosa sono i gruppi di cattura con nome?
Invece che (\d{4})-(\d{2})-(\d{2}) restituisca gruppi numerati, usi (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) e acceda alle corrispondenze come match.groups.year. Molto più manutenibile nel codice reale.
Perché la mia regex è lenta con determinati input?
Backtracking catastrofico. I quantificatori annidati come (a+)+ possono richiedere un tempo esponenziale con input avversariali. Eviti i quantificatori annidati e le alternanze sovrapposte. Il motore di JavaScript non ha un timeout, perciò una regex scritta male può bloccare una richiesta. Per la produzione, usi il pacchetto npm safe-regex per rilevare gli schemi rischiosi.
Questo corrisponde a ciò che fa il motore regex del mio server?
Per lo più: i principali dialetti regex (PCRE, re di Python, regex di Ruby, Java) sono simili ma presentano differenze sottili. La sintassi del lookbehind, il comportamento delle classi di caratteri e la gestione di Unicode variano. Per la parità in produzione, lo provi anche nel linguaggio di destinazione.

Strumenti correlati