Test delle espressioni regolari
Test delle espressioni regolari
Test delle espressioni regolari supporta corrispondenza in tempo reale, gruppi di cattura, gruppi nominati e anteprima delle sostituzioni, utile per validazione di pattern, estrazione testo e sostituzioni in massa.
/
/g
Ricerca globale
Ignora maiusc./minusc.
Multilinea
Punto include a capo
Modalità Unicode
Corrispondenza fissa
Prova testo
Testo sostitutivo
Risultati delle corrispondenze
Inserisci un modello per iniziare la corrispondenza
Anteprima di sostituzione
Avvio rapido
Scenari comuni
Estrarre ID, email, date o marcatori personalizzati da log, HTML sorgente o testo grezzo.
Verificare il comportamento di un pattern prima di usarlo in codice, validazioni form o regole di ricerca.
Usare gruppi di cattura o nominati per sostituire in batch strutture di testo o contenuti di campi.
Consigli d'uso
Limitazioni e compatibilità
Privacy e sicurezza
Domande frequenti
Un'espressione regolare (regex) è un linguaggio di pattern per descrivere strutture di testo. Considerala una "ricerca avanzata": invece di cercare una parola fissa, cerchi tutto ciò che corrisponde a una regola.\n\nAd esempio, \\d{4}-\\d{2}-\\d{2} corrisponde a tutte le date nel formato AAAA-MM-GG e [\\w.]+@[\\w.]+ corrisponde agli indirizzi email. Regex è ampiamente utilizzato per: ricerca ed estrazione di testo (ricerca di codici di errore nei log), convalida del formato (controllo dei numeri di telefono) e sostituzione batch (conversione dei formati di data).\n\nQuasi tutti i linguaggi di programmazione (JavaScript, Python, Java, Go, ecc.) e molti strumenti (VS Code, grep, sed) supportano regex con una sintassi per lo più simile. Questo strumento utilizza il motore JavaScript RegExp per test e apprendimento rapidi online.
L'espressione regolare JavaScript restituisce solo la prima corrispondenza per impostazione predefinita: si tratta di un comportamento di specifica del linguaggio, non di una limitazione dello strumento. Fai clic sul pulsante g nella barra delle bandiere per abilitare la ricerca globale e vedere tutte le corrispondenze.\n\nNota l'interazione tra g e y: g scansiona l'intero testo dall'inizio alla fine, mentre y (permanente) richiede che ciascuna corrispondenza inizi esattamente dove terminava quella precedente: se sono presenti caratteri di intervallo tra le corrispondenze, y si ferma al primo intervallo. Di solito è sufficiente abilitare g senza y.
Esistono quattro cause comuni:\n\n1. Parentesi senza corrispondenza: ogni ( deve avere una corrispondenza ), ogni [ deve avere una corrispondenza ]. Gli IDE possono completarli automaticamente, ma questo strumento richiede l'associazione manuale.\n2. Quantificatori fuori posto: i quantificatori (*, +, ?, {n}) devono seguire un elemento quantificabile. Combinazioni come *+ o ?* sono illegali, a meno che il primo quantificatore non sia ? per modifiche pigre (come *?).\n3. Escape incompleti: un solo \\ alla fine è illegale: deve sfuggire a un carattere specifico (come \\d, \\n, \\\\).\n4. Le proprietà Unicode richiedono il flag u: \\p{L}, \\p{Script=Han} e proprietà Unicode simili sfuggono agli errori di lancio senza il flag u abilitato. Fare clic sul pulsante u per abilitarlo.
Si tratta di token di riferimento sostitutivi definiti da String.prototype.replace() di JavaScript:\n\n- $1, $2, ..., $99: fa riferimento al contenuto acquisito dall'ennesimo gruppo di acquisizione (...)\n- $&: l'intero testo corrispondente\n- $`: il testo prima della partita\n- $': il testo dopo la partita\n- ${name}: il contenuto catturato dal gruppo denominato (?<name>...)\n\nAd esempio, pattern (\\w+)\\s(\\w+) corrispondente a "ciao mondo" con la sostituzione $2-$1 produce "ciao mondo". Per includere un $ letterale nella sostituzione, utilizzare $$ per evitarlo.
I timeout sono quasi sempre causati da un "backtracking catastrofico". Quando il motore regex incontra quantificatori annidati (come (a+)+b) o percorsi opzionali sovrapposti, torna indietro attraverso un numero esponenziale di combinazioni, facendo esplodere il tempo di corrispondenza.\n\nModelli pericolosi tipici: (a+)+, (.*?)*, (.+)+$ ecc. Soluzioni:\n1. Sostituire . con classi di caratteri precise, ad es. [^\\s]+ invece di .+\n2. Evita quantificatori annidati: cambia (a+)+ in a+\n3. Riduci i percorsi opzionali sovrapposti: modifica (a|ab)+ in a+b?\n\nDopo aver modificato il modello, fai clic sul pulsante "Riprova" nell'area dei risultati della partita. Lo strumento ha una protezione timeout di 4 secondi e non bloccherà il tuo browser.
Lingue diverse presentano differenze nel motore regex in tre aree principali:\n\n1. Il supporto della sintassi varia: JavaScript non supporta modelli ricorsivi PCRE (?R), rami condizionali (?(cond)yes|no) o gruppi atomici (?>...). Anche il modulo re di Python ne è privo, ma il suo modulo regex li supporta. Java supporta i gruppi atomici ma non la ricorsione.\n2. La gestione di Unicode è diversa: i processi re di Python 3 \\w, \\d come Unicode per impostazione predefinita; JavaScript utilizza ASCII per impostazione predefinita: è necessario abilitare manualmente il flag u. Ciò significa che \\w non corrisponderà ai caratteri cinesi e che i limiti delle parole \\b non si applicano tra i caratteri CJK.\n3. La semantica di fine riga differisce: quella di Python. non corrisponde a \\n per impostazione predefinita (come JavaScript), mentre Pattern.DOTALL di Java si comporta allo stesso modo del flag di JavaScript.\n\nRaccomandazione: utilizza questo strumento per una rapida verifica della logica, quindi esegui la conferma finale con il motore della lingua di destinazione.