Skip to content

Tester Regex gratuito — Debug e match dei pattern online

Testa pattern regex all'istante su qualsiasi testo. Evidenziazione delle corrispondenze, gruppi di acquisizione, anteprima di sostituzione e split. Espressioni regolari in JavaScript, 100% private, senza registrazione.

Niente tracciamento Funziona nel browser Gratuito
Tutto il test gira localmente nel tuo browser. Il tuo pattern e il tuo testo non lasciano mai questo dispositivo.
Flag
Corrispondenze evidenziate
Corrispondenze e gruppi di acquisizione
Revisionato per fedeltà a ECMA-262, correttezza dei gruppi di acquisizione (con e senza il flag /d), parità del template di sostituzione con String.prototype.replace, resistenza al ReDoS tramite budget wall-clock e accessibilità (ruoli ARIA, annunci di corrispondenza per screen reader, gestione RTL/LTR). — Team Go Tools Text Tooling · May 21, 2026

Cos'è un Tester Regex?

Un tester regex (tester di espressioni regolari) è uno strumento che ti lascia scrivere un pattern regex, incollare un pezzo di testo di prova e vedere esattamente cosa corrisponde al pattern — con gruppi di acquisizione, anteprima di sostituzione e scomposto dei flag — senza ricompilare codice o eseguire uno script. Per gli sviluppatori, accorcia il ciclo da minuti a millisecondi: ritocca il pattern, guarda gli highlight muoversi, spedisci la regex con fiducia.

Un'espressione regolare è un linguaggio compatto per descrivere pattern testuali. `\d+` corrisponde a una o più cifre. `[A-Za-z_]\w*` corrisponde a un tipico identificatore. `(?\d{4})-(?\d{2})-(?\d{2})` corrisponde a una data ISO e nomina ogni parte. Le espressioni regolari sono la spina dorsale del cerca-e-sostituisci in ogni editor di codice, della validazione in ogni form, del parsing dei log in ogni stack di observability, e di `grep`, `sed` e `awk` — gli strumenti Unix su cui gira metà di internet. Sono anche notoriamente difficili da scrivere correttamente: un quantificatore sbagliato di uno o un escape mancante può corrispondere alla sottostringa sbagliata, perdere del tutto una corrispondenza o — caso peggiore — innescare un catastrophic backtracking che prende in ostaggio un core CPU. Un buon tester regex intercetta ognuno di questi modi di fallimento prima che raggiungano la produzione.

Questo tester gira il motore RegExp nativo ECMA-262 incluso in ogni browser moderno — lo stesso motore che chiami da JavaScript, TypeScript, Node.js, Deno o Bun. Questo significa: gruppi di acquisizione (numerati e nominati con `(?...)`), asserzioni di lookahead e lookbehind (`(?=...)`, `(?!...)`, `(?<=...)`, `(?

Cosa fa emergere il tester oltre alle corrispondenze grezze: il pannello Corrispondenze e gruppi di acquisizione elenca ogni match con i suoi offset [start, end) e il valore di ogni gruppo di acquisizione — la stessa informazione che otterresti da `String.prototype.matchAll` con il flag /d, ma disposta per la scansione visiva. La scheda Replace mostra un'anteprima di sostituzione in tempo reale che supporta l'alfabeto completo dei template $1 / $& / $` / $' / $$ / $ — esattamente ciò che String.replace di JavaScript accetta. La scheda Split applica String.split con la regex e mostra ogni parte. La scheda Explain tokenizza il pattern e annota ogni pezzo in italiano semplice, utile per code review, insegnamento e porting tra dialetti.

Per la privacy: ogni operazione è locale. Il tuo pattern e il tuo testo di prova non lasciano mai la pagina — non vengono loggati, non vengono inviati a un servizio di analytics, non vengono memorizzati su disco. Solo le tue preferenze UI (scheda attiva + quali flag tieni di solito attivi) persistono in localStorage. Questo rende lo strumento sicuro per campioni di log redatti, pattern proprietari, configurazioni interne e pattern che includono indizi sullo schema dei tuoi dati. Rispetto a tester server-backed come regex101, la storia di privacy e latenza è strettamente migliore; il trade-off è il supporto a un solo flavour (solo JavaScript).

Se sei nuovo a regex, il dropdown Pattern comuni include partenze rodate dalla battaglia: indirizzo email, URL, IPv4, UUID, colore hex, data ISO, numero di telefono US e un pattern per togliere gli spazi finali. Caricane uno, osserva le corrispondenze sul testo di esempio fornito, poi muta il pattern un carattere alla volta per sentire come risponde il motore. Abbina questo con lo strumento Diff di testo quando vuoi confrontare prima/dopo di una pulizia guidata da regex, con il Formattatore JSON quando il tuo input o l'output atteso è JSON, o con il codificatore URL quando le stringhe che fai corrispondere sono URL-encoded.

// The pattern you build in this tester drops straight into JavaScript.
// Example: extract every ISO date from a string with named groups.

const pattern = /(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g;
const text = 'shipped 2026-05-21, scheduled 2026-06-30';

for (const m of text.matchAll(pattern)) {
  console.log(m.groups.year, m.groups.month, m.groups.day);
  // → 2026 05 21
  // → 2026 06 30
}

// Same regex, used in a replace with $<name> templates:
text.replace(pattern, '$<day>/$<month>/$<year>');
// → 'shipped 21/05/2026, scheduled 30/06/2026'

// With the /d flag, every match carries [start, end] indices
// per capture group — the Matches panel uses this to paint offsets.
const p2 = /(?<year>\d{4})-(?<month>\d{2})/gd;
const m = [...text.matchAll(p2)][0];
m.indices.groups.year; // [8, 12]

Funzionalità chiave

Evidenziazione delle corrispondenze in tempo reale

Ogni corrispondenza nel tuo testo di prova si illumina nell'istante in cui il tuo pattern viene parsato. Colori alternati rendono facile contare visivamente le corrispondenze adiacenti, e il badge del conteggio sopra il risultato ti dice il totale esatto — nessun pulsante Run, nessun delay di debounce oltre i 200ms.

Pannello laterale dei gruppi di acquisizione

Il pannello Corrispondenze e gruppi di acquisizione a destra elenca ogni match come una card con i suoi offset [start, end), il testo completo del match e ogni gruppo di acquisizione posizionale + nominato al suo interno. I gruppi nominati si etichettano come $ così puoi leggere i dati nello stesso modo in cui li consumerai nel codice.

Anteprima Replace in tempo reale con $1 / $& / $

Passa alla scheda Replace per vedere la tua sostituzione applicata in tempo reale. Funziona l'intero alfabeto di sostituzione ECMAScript: $1..$N per posizionali, $ per nominati, $& per l'intero match, $` e $' per prefisso/suffisso, $$ per un dollaro letterale. Pannelli input e output affiancati con copia a un click.

Split con confini regex

La scheda Split chiama String.prototype.split con la tua regex e mostra ogni parte come lista numerata. Le parti vuote sono renderizzate con un glifo ⏎ così puoi vedere come il motore ha gestito i delimitatori adiacenti — utile per il debug di pulizie di input CSV-like.

Spiegazione dei pattern (token-per-token)

La scheda Explain tokenizza il tuo pattern in chip colorati per classe (escape / quantificatore / classe di caratteri / gruppo / ancora / alternanza) e annota ogni chip con una descrizione di una riga. Rileggi la tua regex a te stesso prima di spedirla; usalo per code review o insegnamento.

ReDoS-safe (timeout wall-clock)

Ogni chiamata di match è avvolta in un budget di 250 millisecondi. Forme classiche di catastrophic backtracking come `(a+)+`, `(a|aa)+b` e quantificatori profondamente annidati abortiscono in modo pulito con un avviso Pattern in timeout — la pagina resta reattiva invece di bloccare la scheda. Rilevamento senza un sandbox server-side.

Libreria di pattern comuni

Partenze rodate dalla battaglia per gli otto pattern a cui gli sviluppatori ricorrono più spesso: email, URL, IPv4, UUID v4, colore hex, data ISO, numero di telefono US e rimozione degli spazi finali. Ognuno si carica con un campione corrispondente così vedi la regex funzionare prima di adattarla.

Condivisione tramite permalink (nessun upload)

Copia link codifica pattern + flag + testo di esempio nell'hash URL (#p=…&f=gim&t=…). I browser non trasmettono mai i fragment URL nelle richieste, quindi un link condiviso riproduce il tuo stato sulla macchina del destinatario senza toccare i server di go-tools.org. Autonomo e audit-friendly.

100% privato, solo browser

La tua regex e il testo di prova non lasciano mai il tuo dispositivo. Nessuna richiesta di rete, nessun logging, nessuna analytics su ciò che digiti. Verifica in DevTools → Network: zero richieste quando digiti. Sicuro per pattern proprietari, log redatti e qualunque testo non vorresti incollare in regex101.

Esempi guidati

Estrai ogni indirizzo email da un paragrafo

[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}
/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g

Incolla il pattern con il flag /g attivo, butta un paragrafo nel testo di prova e ogni email si illumina nella vista evidenziata. Il pannello Corrispondenze e gruppi di acquisizione a destra elenca ciascun indirizzo con i suoi offset [start, end) — utile quando passi la stessa regex a grep, sed o a un editor di codice.

Cattura le parti di una data con gruppi nominati

(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})
/(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})/g

I gruppi nominati di ECMA-262 appaiono nel pannello a destra come $, $, $. Passa alla scheda Replace e prova $/$/$ per riformattare date ISO in DMY in un solo passaggio — lo stesso trucco funziona in qualunque chiamata replace JS moderna.

Trova/sostituisci con back-reference $1

(\w+) (\w+)
Sostituzione: $2, $1   →   Jack Doe → Doe, Jack

Due gruppi di acquisizione anonimi, template di sostituzione $2, $1, e la scheda Replace ti dà un'anteprima in tempo reale. $&, $`, $', $$ e $ sono tutti supportati — esattamente l'alfabeto di sostituzione della specifica ECMAScript, così ciò che copi funziona invariato in qualsiasi motore JS.

Rimuovi gli spazi finali riga per riga

[ \t]+$
/[ \t]+$/gm

Combina i flag /g (global) e /m (multiline) in modo che $ si ancori alla fine di ogni riga, non solo alla fine dell'input. La scheda Replace con un'anteprima di sostituzione vuota mostra un diff pulito: tab e spazi finali spariscono, la prosa resta intatta. La stessa regex con il flag /s (dotAll) disattivato impedisce a . di attraversare i newline.

Rileva il catastrophic backtracking e sopravvivici

(a+)+b
Testo di prova: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac

I quantificatori + annidati formano un classico pattern ReDoS. In un tester ingenuo questo blocca la scheda. Qui il timeout a wall-clock scatta dopo 250ms, compare il banner Pattern in timeout e la pagina resta reattiva. Ancora il pattern, passa a un'alternanza non sovrapposta o usa idiomi atomic-like — e ritesta.

Split di una riga CSV-like con delimitatori misti

[,;|]\s*
alpha, beta; gamma | delta → ["alpha", "beta", "gamma", "delta"]

Passa alla scheda Split. Qualsiasi virgola, punto e virgola o pipe (seguito da spazi opzionali) diventa un confine di parte. Utile per ripulire liste di tag copia-incollate, normalizzare input utente o pre-processare campi di log prima di un vero parser CSV — vedi Da CSV a JSON quando i dati sono davvero RFC 4180.

Come usare il Tester Regex

  1. 1

    Digita il tuo pattern tra gli slash

    Butta una qualsiasi espressione regolare ECMA-262 nel campo /…/. I pattern non validi si evidenziano in rosso con un messaggio del parser; i pattern validi passano al match in tempo reale.

  2. 2

    Attiva i flag che ti servono

    g (global), i (case-insensitive), m (multiline), s (dotAll), u (unicode), y (sticky), d (indices). Ogni chip si illumina quando è attivo; il readout a destra del pattern mostra il letterale canonico.

  3. 3

    Incolla il tuo testo di prova

    Le corrispondenze si evidenziano in colori alternati mentre digiti. Il pannello Corrispondenze e gruppi di acquisizione a destra elenca ogni match con offset [start, end) e il valore di ogni gruppo di acquisizione (i gruppi nominati sono etichettati $).

  4. 4

    Cambia scheda per Replace, Split o Explain

    Replace mostra l'anteprima di un template di sostituzione accanto all'input. Split affetta a ogni confine di match. Explain scompone il pattern token-per-token con una descrizione in italiano semplice per ogni elemento.

  5. 5

    Copia il letterale o condividi un permalink

    Copia /pattern/flags mette il letterale regex canonico negli appunti per l'uso diretto in JavaScript / TypeScript / Node. Copia link codifica lo stato completo in un hash URL (nessun upload) così un collega può riprodurlo localmente.

Errori comuni nelle regex

Hai dimenticato il flag /g e hai ottenuto una sola corrispondenza

Senza /g (o /y), il motore si ferma dopo la prima corrispondenza. I metodi match, matchAll, replace e split si comportano tutti diversamente attorno al flag globale. Attiva /g e riesegui; il conteggio sopra i risultati salta da 1 a N.

✗ Errato
Pattern: /\d+/  →  '1 22 333' dà solo ['1']
✓ Corretto
Pattern: /\d+/g  →  '1 22 333' dà ['1', '22', '333']

Chi usa questo strumento

Valida input di form prima del rilascio
Conferma che la tua regex per email / telefono / CAP / username corrisponda a ciò che ti aspetti — e rifiuti ciò che non vuoi — attraverso casi limite (nomi Unicode, plus-aliasing, formati internazionali) prima che la validazione raggiunga la produzione e rimbalzi utenti reali.
Estrai dati da log e configurazioni
Costruisci un pattern che estragga ID di richiesta, codici di stato, latenze o righe di stack trace da una porzione arbitraria di log. I gruppi nominati rendono i dati auto-documentanti; il pannello Corrispondenze mostra gli offset così puoi passare la stessa regex a `rg --replace` o `grep -oE` dopo.
Trova/sostituisci in un codebase
Bozza un pattern di refactor (es. `(\w+)\.apply\(null,\s*\[(.*?)\]\)` → `$1($2)`) qui, vedi l'anteprima della sostituzione su snippet rappresentativi, poi incolla la regex validata nel cerca/sostituisci a livello di progetto del tuo editor con fiducia.
Controlla un pattern trovato online
Hai incollato una regex da StackOverflow o da un blog? Buttala nella scheda Explain — ogni token viene annotato in italiano semplice. Intercetta problemi sottili (`.+?` dove volevi `.+`, ancore `^`/`$` mancanti, quantificatori accidentalmente greedy) prima che la regex finisca nel tuo codice.
Insegna regex a un collega
Apri la scheda Explain su un pattern funzionante e percorrilo token-per-token. La codifica a colori (escape / quantificatore / classe di caratteri / gruppo / ancora / alternanza) lascia che chi impara veda la forma strutturale della regex, non solo i caratteri.
Porta un pattern tra linguaggi
Hai una regex Python o PCRE che ti serve in JavaScript? Incollala qui. Se viene parsata, l'explainer ti mostra la semantica JS-equivalente; se no, l'errore del parser nomina il costrutto offendente (gruppi atomici, quantificatori possessivi, inline `(?i)`) così sai esattamente cosa riscrivere.
Debug di una regex lenta in produzione
Se una regex server è sospettata di catastrophic backtracking, incollala in questo tester con un campione dell'input. Il timeout wall-clock di 250ms scatta sui casi patologici, dandoti una diagnosi immediata prima di ricorrere a strumenti di profiling — e l'explainer indica la causa radice nel quantificatore annidato.

Note su motore e algoritmo

Motore RegExp ECMA-262 (browser nativo)
Usa `new RegExp(pattern, flags)` e il motore incluso in V8 / JavaScriptCore / SpiderMonkey — la stessa semantica regex che ottieni in JavaScript ovunque. I pattern che validano qui girano invariati in Node.js, Deno, Bun e ogni browser moderno.
Iterazione dei match via String.matchAll
L'iterazione globale usa `text.matchAll(regex)` invece di un loop manuale su lastIndex, così ogni match porta con sé i suoi gruppi di acquisizione, gruppi nominati e (con /d) gli indici [start, end]. I match a larghezza zero sono gestiti con l'avanzamento standard di +1 su lastIndex per evitare loop infiniti.
Timeout wall-clock per la protezione ReDoS
Un budget di 250 millisecondi avvolge ogni chiamata di match, replace e split. Il motore può comunque fare backtrack internamente su un singolo tentativo di match, ma l'iterazione esterna coopera con il budget — i pattern patologici abortiscono con `timedOut: true` e l'UI fa emergere un avviso invece di bloccare la scheda.
Reimplementazione del template di sostituzione
La scheda Replace fa il parsing manuale di $1..$N, $&, $`, $', $$ e $ invece di delegare a `String.replace`, così l'anteprima si comporta in modo identico su tutti i motori (Safari più vecchio, Node più vecchio) dove i template a gruppi nominati hanno casi limite. L'output è esattamente ciò che producono i motori JavaScript attuali.
Tokenizer del pattern per l'explainer
La scheda Explain esegue un tokenizer scritto a mano che classifica ogni frammento del pattern (escape / metachar / quantificatore / classe di caratteri / apertura-gruppo / chiusura-gruppo / ancora / alternanza). I costrutti non familiari ricadono su `literal` con una nota generica così l'explainer non perde mai silenziosamente del contenuto.
Permalink tramite hash URL (mai trasmessi)
Lo stato condiviso è codificato nel fragment location.hash (`#p=…&f=…&t=…&tab=…`). I browser non trasmettono mai il fragment nelle richieste HTTP, quindi i server di go-tools.org ricevono zero dati quando viene aperto un permalink. L'idratazione avviene interamente sul dispositivo del destinatario.

Best practice per le regex

Ancora i pattern quando intendi farlo
`^pattern$` corrisponde a una stringa esatta; `pattern` corrisponde ovunque. La scelta sbagliata è il bug più comune nella validazione dei form: un `^` mancante lascia passare un `attacker.com/` iniziale oltre un controllo di dominio; un `$` mancante lascia passare spazzatura finale. Usa la scheda Match contro campioni deliberatamente rotti per confermare cosa viene rifiutato.
Preferisci gruppi non-catturanti per la pura struttura
`(?:foo|bar)+` e `(foo|bar)+` sono funzionalmente identici, ma il primo non alloca un gruppo di acquisizione. Ricorri a `(?:…)` ogni volta che il gruppo esiste solo per un quantificatore o un'alternanza — mantiene stabili i tuoi $1..$N numerati e risparmia una piccola quantità di lavoro al motore.
Usa il flag /u per qualsiasi cosa oltre l'ASCII
Senza /u, il punto e `\w` trattano i caratteri a coppia surrogata (emoji, code point non-BMP) come due unità UTF-16. Con /u, sono un code point ciascuno — ciò che percepiranno i tuoi utenti. /u abilita anche `\p{Letter}` e altri escape di proprietà. Default a /u per i nuovi pattern a meno che tu non abbia una ragione specifica per non farlo.
Nomina i tuoi gruppi di acquisizione
`(?\d{4})-(?\d{2})` è auto-documentante. Sei mesi dopo quando rileggi la regex, `m.groups.year` è ovviamente l'anno — `m[1]` no. Anche i template di sostituzione con $ sopravvivono al riordino dei gruppi: i template posizionali si rompono nel momento in cui qualcuno aggiunge un altro gruppo.
Testa i casi di fallimento, non solo i successi
Un tester regex è per i fallimenti. Conferma cosa il tuo pattern fa corrispondere, poi muta deliberatamente il testo di prova per vedere cosa non fa corrispondere — spazi iniziali, spazi finali, parti mancanti, parti extra, case sbagliato, script misti. I pattern che passano input validi ma accettano spazzatura sono i bug che la produzione espone per primi.

Domande frequenti

La mia regex o il testo di prova vengono inviati al vostro server?
No. Ogni operazione di match, replace, split e explain gira in JavaScript dentro al tuo browser usando il motore RegExp nativo. Il tuo pattern e il tuo testo non vengono caricati, non vengono loggati, non vengono memorizzati su disco, non vengono inviati a nessuna terza parte. Solo le tue preferenze UI (scheda attiva + quali flag tieni di solito attivi) vengono salvate in localStorage in modo che la pagina se le ricordi alla visita successiva — mai il pattern né il testo di prova. Puoi verificare aprendo DevTools → Network: digitare in entrambi i box genera zero richieste. Questo rende lo strumento sicuro per pattern proprietari, campioni di log redatti, configurazioni interne e qualunque altra cosa non vorresti incollare in regex101.
Quale flavour di regex usa questo tester — PCRE, Python, Java, JavaScript?
ECMA-262 (JavaScript), il dialetto implementato da V8, JavaScriptCore e SpiderMonkey — lo stesso motore che ottieni con `new RegExp(pattern, flags)` in qualsiasi browser, Node.js, Deno o Bun. Questo significa che le feature supportate sono: gruppi di acquisizione (numerati + nominati con `(?...)`), lookahead `(?=...)` e `(?!...)`, lookbehind `(?<=...)` e `(?...)`, quantificatori possessivi `a++`, condizionali `(?(1)yes|no)` e modificatori inline `(?i)` lanceranno un errore di sintassi. `re.VERBOSE` di Python non è supportato qui. Per regex Python/Java/Go, riporta il pattern al suo motore nativo — la maggior parte dei pattern semplici si trasferisce invariata, e l'explainer qui è neutrale rispetto al flavour.
Cosa fanno i flag g, i, m, s, u, y, d?
g (global) — trova ogni corrispondenza, non solo la prima; richiesto per iterare con .matchAll e per la sostituzione globale. i (case-insensitive) — A e a corrispondono allo stesso carattere. m (multiline) — ^ e $ si ancorano a ogni interruzione di riga, non solo all'inizio/fine dell'intero input. s (dotAll) — . corrisponde anche ai newline; senza /s un punto si ferma a \n. u (unicode) — abilita gli escape \u{HHHH}, gli escape di proprietà Unicode (\p{Letter}) e tratta il pattern come una sequenza di code point Unicode invece di code unit UTF-16. y (sticky) — ancora ogni match a lastIndex, utile per i tokenizer. d (hasIndices, ES2022) — popola `.indices` e `.indices.groups` con coppie [start, end] per ogni cattura; questo tester usa /d sotto il cofano per disegnare i confini dei gruppi. Attivali come chip sopra il testo di prova; il letterale canonico /pattern/flags viene mostrato nel readout.
Come scrivo i gruppi di acquisizione e come ci faccio riferimento?
Avvolgi un sub-pattern in parentesi: `(\d{4})-(\d{2})-(\d{2})` ti dà tre gruppi posizionali, accessibili come $1, $2, $3 nelle sostituzioni o come m.groups[0..2] nel pannello Corrispondenze. Usa `(?...)` per i gruppi nominati: `(?\d{4})-(?\d{2})` ti permette di scrivere $/$ nel template di sostituzione. Usa `(?:...)` per un gruppo non-catturante quando ti serve il raggruppamento solo per un quantificatore (`(?:foo|bar)+`) — non crea una back-reference, il che mantiene stabili i tuoi $1..$N numerati. All'interno dello stesso pattern, fai riferimento a una cattura precedente con `\1`, `\2`, ecc. — utile per trovare parole doppie come `\b(\w+)\s+\1\b`.
Come funzionano lookahead e lookbehind, e a cosa servono?
I lookaround sono asserzioni a larghezza zero — verificano che qualcosa corrisponda (o no) senza consumare caratteri. `(?=foo)` (lookahead positivo) ha successo se `foo` segue la posizione corrente; `(?!foo)` (lookahead negativo) ha successo se `foo` NON segue. `(?<=foo)` e `(?
Perché la mia regex blocca il browser, e cos'è il catastrophic backtracking?
Il catastrophic backtracking succede quando un pattern ha quantificatori annidati su alternative sovrapposte — la forma classica è `(a+)+`, `(a|aa)+`, `(\w*)*` o `(?:a|a?)+`. Su un input dove il match può fallire all'ultimo carattere, il motore prova un numero esponenziale di split di gruppo prima di arrendersi. Su `aaaaaaaaaaaaaaaaaaaaab` con il pattern `(a+)+b`, si tratta di 2^21 ≈ 2 milioni di backtrack prima della risposta. Questo tester avvolge ogni chiamata di match in un budget wall-clock di 250ms — se il budget viene superato, l'iterazione si ferma e vedi un avviso Pattern in timeout. Soluzioni: ancora il pattern ai suoi confini (`^...$`), preferisci alternative non sovrapposte (`(a|b)` invece di `(a|aa)`), spacchetta i quantificatori annidati (`a+` invece di `(a+)+`), oppure riscrivi usando idiomi possessive-like (`(?=(a+))\1` simula `a++` in JS).
Come si differenzia questo tester regex da regex101.com?
Tre differenze. (1) Privacy: regex101 invia ogni keystroke ai suoi server per la valutazione backend e memorizza i pattern in link comunitari condivisi; questo strumento gira interamente nel tuo browser, zero chiamate di rete. (2) Velocità: un roundtrip al server a ogni modifica aggiunge 80-300ms; qui le corrispondenze si aggiornano in meno di 10ms anche su testi lunghi. (3) Focus sul flavour: regex101 supporta PCRE, Python, Java, .NET, JavaScript, Rust e Go con UI a feature-flag; questo strumento si concentra su ECMA-262 (JavaScript) — il flavour che ogni browser, Node, Deno e Bun include — e l'explainer più i permalink sono tarati su quel singolo flavour. Se ti servono feature solo-PCRE, regex101 resta lo strumento giusto; per il lavoro JavaScript / TypeScript, questo è più veloce e più privato. I permalink qui sono hash URL (nessun upload), quindi un link condiviso riproduce il tuo pattern localmente sulla macchina del destinatario.
Come faccio l'escape di caratteri speciali come . | ( ) [ ] { } * + ? ^ $ \?
Metti un backslash davanti: `\.`, `\|`, `\(`, `\)`, `\[`, `\]`, `\{`, `\}`, `\*`, `\+`, `\?`, `\^`, `\$`, `\\`. Lo slash `/` non ha bisogno di escape in un pattern passato come stringa (solo nei letterali regex JS tra gli slash). Dentro una classe di caratteri `[...]` la maggior parte dei metacaratteri perde il suo significato speciale, quindi `[.]`, `[*]`, `[+]` corrispondono tutti a un carattere letterale — gli unici metacaratteri che restano speciali sono `]`, `\`, `^` (solo all'inizio per negare), e `-` (range quando tra due caratteri). Nel dubbio, incolla il testo letterale nel pattern ed esegui l'explainer: ogni sequenza di escape ottiene una descrizione di una riga nel pannello breakdown.
Posso condividere una regex con un collega tramite link?
Sì — e il link non comporta alcun roundtrip al server. Clicca Copia link nella barra delle azioni: il tester codifica il tuo pattern, i flag, il testo di prova e la scheda attiva nell'hash URL (`#p=...&f=gim&t=...&tab=match`). Chiunque apra il link idrata la pagina con lo stesso stato — localmente sulla sua macchina. Poiché i dati vivono nel fragment hash, non vengono mai inviati al server go-tools.org (i browser non trasmettono i fragment nelle richieste) e non vengono registrati nei nostri log di accesso. La lunghezza del link cresce con la dimensione del testo, quindi per campioni >2KB copia la regex con Copia /pattern/flags e incolla il testo separatamente. Per una review collaborativa di regex senza condividere il testo reale, condividi solo il pattern e i flag — il destinatario incolla il proprio corpus e ottiene le stesse corrispondenze.
Il tester supporta Unicode, emoji e script non latini?
Sì. Abilita il flag /u per attivare la gestione Unicode completa: \w corrisponde ai caratteri di parola latini (semantica di default), ma con /u puoi corrispondere a categorie più ampie tramite gli escape di proprietà Unicode — `\p{Letter}` corrisponde a ogni lettera in ogni script, `\p{Script=Han}` corrisponde agli ideogrammi cinesi, `\p{Emoji}` corrisponde alle emoji, `\p{Number}` corrisponde a ogni cifra/numerale. Senza /u, emoji a coppia surrogata come 👨‍💻 vengono viste come due code unit UTF-16 e pattern come `^.$` falliranno a trovarle; con /u il punto tratta ogni code point grafema come un carattere. Per script RTL (arabo, ebraico), i pattern funzionano senza gestione speciale — la direzione è una questione di rendering, non del motore regex. Il contenuto CJK corrisponde nello stesso modo del latino.
Qual è la differenza tra .match, .matchAll, .replace e .split con una regex?
String.prototype.match restituisce la prima corrispondenza (o un array di tutte le corrispondenze quando /g è impostato) ma perde i gruppi di acquisizione quando /g è attivo. String.prototype.matchAll richiede /g e restituisce un iteratore di array di match CON gruppi di acquisizione e indici — quello che questo tester usa internamente. String.prototype.replace accetta o un template stringa ($1, $&, ecc.) o una callback chiamata per ogni match con (match, ...groups, offset, string, namedGroups). String.prototype.split divide a ogni match — utile con /g ma il flag global viene ignorato per la semantica di split. Questo strumento espone match nella scheda Match, replace in Replace e split in Split, così puoi vedere l'anteprima di ogni flavour senza lasciare la pagina; il letterale /pattern/flags è a un click di distanza quando sei pronto a incollare nel codice.
Perché la mia regex Python o Java non funziona qui?
Perché questo tester gira ECMA-262 (JavaScript) — la maggior parte dei pattern si porta pulitamente, una manciata no. Trappole comuni del porting: (1) I flag inline di Python `(?i)` e `(?x)` non sono validi in JS — usa invece i chip dei flag in alto. (2) `\A` e `\Z` di Python sono `^` e `$` in JS (con /m per le ancore di riga). (3) I condizionali Java/Python `(?(name)yes|no)` non sono supportati in JS — riscrivi con un'alternanza. (4) Quantificatori possessivi `a++` e gruppi atomici `(?>...)` non sono disponibili in JS — simula con `(?=(a+))\1`. (5) Python `(?P...)` è `(?...)` in JS. (6) `\h` per spazi bianchi orizzontali e `\v` per quelli verticali non sono in JS — usa `[ \t]` e `[\n\r]`. Per un porting portabile, l'explainer scompone cosa fa ogni token così puoi sostituire la sintassi non supportata con un equivalente.
Esiste un limite massimo di dimensione del testo o di numero di corrispondenze?
Limite pratico: circa 200.000 caratteri di testo di prova e 500 corrispondenze evidenziate visualizzate insieme. Oltre 500 corrispondenze il pannello Corrispondenze mostra un banner Mostrate le prime 500; il badge del conteggio segnala comunque il totale reale. Il budget wall-clock di 250ms limita i pattern fuori controllo indipendentemente dalla dimensione. Per file di log da più megabyte, esegui la regex con `grep -oE` o `rg` (ripgrep) da riga di comando — sono streaming e non incontrano il cap di rendering UI. Per scan una tantum di testi enormi, incolla una porzione rappresentativa in questo tester per validare il pattern, poi esegui il pattern validato sul file completo nella tua shell.

Strumenti correlati

Vedi tutti gli strumenti →