Command Palette

Search for a command to run...

Regex Replace: trova e sostituisci con un'espressione regolare senza toccare il tuo editor

Regex Replace: trova e sostituisci con un'espressione regolare senza toccare il tuo editor

T
Toolz Team
|Aug 23, 2026|17 min letto

Parte della raccolta incastonare

Il compito che mi ha fatto costruire questo era noioso, ed è proprio per questo che valeva la pena automatizzarlo Un cliente mi ha consegnato un'esportazione di 4.000 righe in cui ogni data era scritta in stile americano, 01/15/2024, e il sistema in cui stava andando voleva ISO, 2024-01-15. Un semplice "trova e sostituisci" non poteva toccarlo, perché non c'era una stringa fissa da cercare: le date erano tutte diverse. Ciò che condividevano era un foggiare: due cifre, una barra, due cifre, una barra, quattro cifre Questo è esattamente il tipo di cosa che un'espressione regolare corrisponde, e precisamente il tipo di cosa che una sostituzione regex riscrive in un passaggio Ho incollato il file in uno strumento di scratch, ho scritto un'espressione e l'intera esportazione ha capovolto il formato in meno di un secondo.

Questo è il lavoro gratuito Regex Sostituisci tool fa, e questa guida è la versione lunga di come usarlo bene Coprirò cosa sia effettivamente un sostituto di regex, come i backreference del gruppo di acquisizione ti consentono di ristrutturare il testo invece di eliminarlo solo, cosa significa ogni token di sostituzione speciale e gli errori che fanno inciampare le persone. Si siede accanto al tester regex Ho scritto separatamente - il tester ti dice che cosa corrisponde un modello, e questo strumento riscrive ciò che corrispondeva Se le espressioni regolari stesse sono nuove per te, inizia con il guida completa agli strumenti di codifica e torna indietro.

tl; dr: Una sostituzione regex corrisponde al testo per modello e riscrive ogni corrispondenza utilizzando una stringa di sostituzione Avvolgi le parti che desideri riutilizzare tra parentesi per creare gruppi numerati, quindi fai riferimento a queste nella sostituzione con $1, $2e così via: lo schema (\d{4})-(\d{2})-(\d{2}) con sostituzione $3/$2/$1 gira 2024-01-15 dentro 15/01/2024. Accendere il g flag per sostituire ogni corrispondenza, lasciare vuota la sostituzione per eliminare le corrispondenze e utilizzare $<name> per gruppi nominati. il Regex Sostituisci tool viene eseguito interamente nel browser e mostra il conteggio delle sostituzioni in diretta.

Che cosa è un sostituto di regex?

Un normale find-and-replace funziona su testo letterale: digiti la parola esatta che stai cercando e la parola esatta da mettere al suo posto fallisce nel momento in cui la cosa che vuoi cambiare non è una stringa fissa ma un pattern - una data in una qualsiasi delle cento forme, un numero di telefono, un tag HTML, una corsa di spazi bianchi finale, un nome variabile che segue una convenzione Un'espressione regolare descrive quel pattern e una sostituzione regex lo accoppia con un modello che dice come ogni corrispondenza dovrebbe essere riscritta.

Il meccanismo ha due metà Il modello è un'espressione regolare con cui il motore scansiona il tuo testo, trovando ogni luogo in cui si verifica la forma. IL sostituzione è una stringa che viene sostituita per ogni corrispondenza Nel caso più semplice la sostituzione è in testo semplice e ogni corrispondenza diventa la stessa cosa - utile per normalizzare, diciamo, ogni serie di schede e spazi in un unico spazio Il caso potente è quando la sostituzione si riferisce a parti di ciò che è stato abbinato, quindi l'output è costruito dall'input anziché essere una costante fissa Questo è ciò che trasforma una sostituzione regex da un cancella e retipia smussato in un vero strumento di ristrutturazione.

Sotto il cofano, il Regex Sostituisci tool utilizza il JavaScript RegExp motore e il String.prototype.replace metodo fornito da ogni browser e Node.js. Ciò è importante per una ragione pratica: il comportamento che vedi nello strumento è identico al comportamento che otterrai se incolli lo stesso modello e la stessa sostituzione nel tuo codice JavaScript o TypeScript. Non c'è sapore separato da imparare e nessuna sorpresa quando passi dallo strumento scratch alla produzione. La sintassi sostitutiva accettata dallo strumento - $1, $&, $<name> e il resto - è la sintassi esatta che lo standard definisce, documentata su MDN&#39;s Riferimento String.replace.

Come funzionano i backreference dei gruppi di acquisizione?

Questa è l'idea più utile nella sostituzione del regex e vale la pena rallentarla. Quando inserisci parte di un modello tra parentesi, crei un cattura gruppo. Il motore ricorda il testo che il gruppo ha abbinato e numera i gruppi da sinistra a destra iniziando da uno. Nella stringa sostitutiva, $1 significa & quot; inserisci qualunque sia il primo gruppo catturato, & quot; $2 il secondo, e così via fino a $99.

L'esempio della data lo rende concreto Il modello (\d{4})-(\d{2})-(\d{2}) ha tre gruppi: l'anno a quattro cifre, il mese a due cifre e il giorno a due cifre Quando corrisponde 2024-01-15vale il primo gruppo 2024il gruppo due vale 01e il gruppo tre tiene 15. Una sostituzione di $3/$2/$1 quindi assembla una nuova stringa da quei pezzi in un ordine diverso e con separatori diversi, producendo 15/01/2024. Nulla è stato eliminato e ridigitato - l'output è letteralmente ricostruito dai frammenti catturati Riordina i token, modifica la punteggiatura tra di loro, avvolgili in altro testo e hai riformattato ogni data nel file con un'espressione.

I gruppi denominati sono la stessa idea con etichette leggibili Invece di contare le parentesi, scrivi (?<year>\d{4}) e riferirlo nella sostituzione come $<year>. Per un modello con due o tre gruppi i numeri vanno bene, ma una volta che ti stai destreggiando tra cinque o sei, i nomi rendono sia il modello che la sostituzione molto più facili da leggere e da cambiare in seguito Lo strumento supporta entrambi in modo intercambiabile, in modo da poter mescolare $1 e $<name> nella stessa sostituzione se ti piace Quando stai assemblando per la prima volta un modello e non sei ancora sicuro di quali gruppi hai bisogno, il Costruttore di regex ti aiuta a costruirlo pezzo per pezzo prima di portarlo qui per eseguire la sostituzione.

Cosa significano i token sostitutivi speciali?

Il simbolo del dollaro è speciale all'interno di una stringa sostitutiva, e introduce un piccolo insieme di token oltre i gruppi numerati e nominati Conoscendoli si salva dal raggiungere per uno schema più complicato di quello che ti serve.

$& inserisce l'intera sottostringa abbinata È ciò che si desidera quando si avvolgono o si annotano le corrispondenze anziché ricostruirle - uno schema di \b\w+@\w+\.\w+\b con una sostituzione di <$&> mette parentesi angolari attorno a ogni indirizzo email senza che tu debba catturare il tutto in un gruppo. $\`` (a backtick) inserts everything *before* the match, and $&#39;(an apostrophe) inserts everything *after* it; these are rarely needed but occasionally exactly right. And because$is special, outputting a literal dollar sign requires doubling it:$$in the replacement produces a single$` in the output, che conta il giorno in cui stai riformattando la valuta.

C'è un idioma di eliminazione che vale la pena di impegnare nella memoria: una sostituzione vuota rimuove ogni corrispondenza Con il flag globale acceso e il campo Sostituisci lasciato vuoto, lo strumento elimina ogni occorrenza del modello dal testo Questo è il modo più pulito per spogliare qualcosa - tutti i tag HTML con <[^>]+>, ogni spazio finale con +$ in modalità multilinea, tutte le non cifre di un numero di telefono con \D. Non stai sostituendo con uno spazio o un segnaposto; stai sostituendo con niente e la partita semplicemente svanisce.

Quali bandiere contano per una sostituzione?

Le bandiere su un regex cambiano il modo in cui viene applicato, e due di esse dominano il lavoro di sostituzione di tutti i giorni Il resto è situazionale ma occasionalmente decisivo.

La bandiera globale, g, è quello che si toggle più Senza di esso, JavaScript&#39; s replace cambia solo il innanzi tutto abbina e lascia il resto del testo da solo: questo è standard String.replace comportamento e sorprese le persone che si aspettano un sostituto. Girare g on e ogni corrispondenza nel testo viene riscritta Lo strumento viene impostato per impostazione predefinita su global on, perché sostituire tutto è ciò che le persone intendono diciannove volte su venti, ma l'interruttore è lì per le volte in cui si desidera veramente toccare solo la prima occorrenza Il flag ignore-case, i, fa corrispondere il modello indipendentemente dal caso della lettera, quindi error anche partite Error e ERROR - essenziale quando normalizzi i livelli dei registri o riordini la capitalizzazione incoerente.

La bandiera multilinea, m, cambia ciò che gli ancoraggi ^ e $ media: con esso acceso, corrispondono all'inizio e alla fine di ciascuno allinearsi piuttosto che dell'intero testo, che è ciò che vuoi quando stai eliminando gli spazi bianchi finali o anteponendo ogni riga. Il flag dotAll, slascia che il punto corrisponda ai caratteri della nuova riga, in modo che un modello possa estendersi sulle interruzioni di riga, utile per riscrivere i blocchi multi-riga. IL u (unicode) e y le bandiere (appiccicose) sono per casi avanzati: u consente la corretta gestione dei caratteri all'esterno del piano di base e di alcune forme di fuga, e y ancora ogni tentativo di partita alla posizione esatta dopo quella precedente. La tabella comparativa seguente riassume quando ciascuno guadagna il suo posto.

imbandiera Lettera Effetto su una sostituzione Uso tipico
globale g Sostituisci ogni partita invece della sola prima Quasi tutti sostituiscono tutti
Ignora caso i Corrispondenza indipendentemente dal caso della lettera Normalizzazione dei livelli logaritmici, riordino della capitalizzazione
Multiline m ^ e $ ancorare ad ogni linea Linee di prefissatura, spogliatura degli spazi finali
DotAll s Il punto corrisponde anche alle nuove linee Riscrittura di blocchi multi-linea
Unicode u Corretta gestione dei caratteri astrali e \u{...} Emoji, scritture non latine
Appiccicoso y Corrispondenza solo nella posizione attuale Tokeniser, analisi sequenziale rigorosa

Quando dovrei usare regex replace invece di un semplice find-and-replace?

La linea di demarcazione è semplice: usa un semplice find-and-replace quando conosci il testo esatto e reach for regex replace quando conosci la forma ma non il testo esatto Se stai cambiando ogni 2023 a 2024, una sostituzione ordinaria è più veloce e più sicura Se si sta cambiando ogni anno a quattro cifre indipendentemente dal valore, solo un modello può esprimere che.

Tre famiglie di compiti cadono chiaramente sul lato regex La prima è riformattazione, dove il contenuto rimane lo stesso ma la sua disposizione cambia - date, numeri di telefono, nomi scritti & quot; Ultimo, Primo& quot; che vuoi come & quot; Primo Ultimo.& quot; I gruppi di cattura più una sostituzione riordinata gestiscono tutti questi Il secondo è sfuso, dove si elimina tutto ciò che corrisponde a un modello - tag, commenti, caratteri di controllo, spazi bianchi extra - sostituendo con nulla Il terzo è modifica condizionale su larga scala, dove si avvolge, si prefissa o si annota ogni occorrenza di un modello, utilizzando $& per mantenere la corrispondenza e aggiungerla Quando la trasformazione che stai descrivendo a te stesso contiene la parola & quot; every&quot; seguita da una descrizione piuttosto che da una stringa letterale, sei in territorio di sostituzione regex.

C'è anche un argomento del flusso di lavoro Fare queste modifiche nel tuo editor di codice&#39;s find-and-replace funziona, ma modifica il file in posizione, il che significa che un errore è un errore nel tuo file reale Esecuzione della trasformazione in uno strumento di scratch prima ti consente di vedere l'output e il conteggio delle sostituzioni prima di commettere qualsiasi cosa, quindi incollare il risultato verificato indietro Perché il Regex Sostituisci tool funziona interamente nel tuo browser e non carica mai ciò che incolli, è sicuro da usare anche quando il testo è un registro di produzione o un'esportazione del cliente - un punto che faccio per intero nel guida alla privacy dei dati per gli strumenti online.

Quali sono gli errori comuni con regex replace?

Quello più frequente è dimenticare la bandiera globale e chiedersi perché è cambiata solo la prima partita Se il tuo sostituto sembra non aver fatto quasi nulla - una modifica dove te ne aspettavi decine - controlla che g è acceso È un viaggio così comune che lo strumento lo attiva per impostazione predefinita, ma nel momento in cui lo spegni per scegliere come target una singola partita, ricordati di girarla indietro.

Il secondo è un letterale $1 appare nell'output in cui ti aspettavi il testo catturato Ciò significa quasi sempre che il gruppo a cui stai facendo riferimento non esiste: il tuo modello non ha un primo set di parentesi, quindi non c'è nulla per $1 per sostituire, e il motore lascia il token così com'è La correzione è quella di avvolgere la parte che si desidera riutilizzare tra parentesi per creare il gruppo, e di contare i gruppi da sinistra a partire da uno Una trappola correlata è un conteggio errato quando il modello ha nidificato o gruppi opzionali; quando la numerazione diventa confusa, passare a gruppi con nome in modo che il riferimento non sia ambiguo.

Il terzo errore è un modello che corrisponde più di quanto si intendesse, di solito perché un quantificatore è avido Un modello come <.+> pensato per corrispondere a un tag HTML corrisponderà felicemente dal primo < alla ultimo > sulla linea, ingoiando tutto tra due tag La cura è un quantificatore non avido, <.+?>, o una classe di caratteri più precisa, <[^>]+>. Questa è esattamente la situazione in cui si verifica il modello nel tester regex innanzitutto, guarda cosa evidenzia e solo dopo esegui la sostituzione: un'abitudine guida regex-tester attraversa nel dettaglio Il conteggio delle sostituzioni mostrato nello strumento è l'altra tua salvaguardia: se riporta molte più o molte meno sostituzioni rispetto al numero di cose che intendevi cambiare, lo schema è sbagliato, non lo strumento.

Un esempio pratico: riformattare i nomi e spogliare il rumore

Lasciami passare attraverso un piccolo lavoro da un capo all'altro, perché vedere i pezzi lavorare insieme risolve l'idea meglio di ogni singola regola Supponiamo di avere un elenco di contatti esportati come Doe, Jane e Smith, John, uno per riga, e li vuoi come Jane Doe e John Smith.

La forma di ogni riga è: alcuni caratteri di parola, una virgola, uno spazio, poi più caratteri di parola Come modello che è (\w+), (\w+), con il cognome catturato nel gruppo uno e il nome nel gruppo due. La sostituzione che li scambia e lascia cadere la virgola è $2 $1 - gruppo due, uno spazio, gruppo uno Incolla la lista nel Regex Sostituisci strumento, inserisci quel modello e sostituisci, lascia il flag globale acceso e ogni riga passa a & quot; Primo Ultimo& quot; subito Il conteggio delle sostituzioni ti dice quante righe sono state toccate, che puoi controllare con la sanità mentale rispetto al numero di contatti.

Ora supponiamo che la stessa esportazione abbia spazi bianchi finali su alcune linee che anche tu vuoi che vadano. Questo è un secondo sostituto separato: modello +$ con la bandiera multilinea su così $ corrisponde alla fine di ogni riga, e una sostituzione vuota in modo che gli spazi abbinati vengano eliminati anziché sostituiti Eseguilo dopo lo scambio di nome e il file è pulito L'approccio a due passaggi - una sostituzione da ristrutturare, una da spogliare - è tipico, e poiché ogni passaggio ti mostra il suo output e il suo conteggio prima di copiarlo, non indovinerai mai se la trasformazione ha fatto quello che intendevi Quando il testo rimodellato ha bisogno di una differenza visiva finale rispetto all'originale per confermare nient'altro spostato, incolla entrambe le versioni nel testo Differenza strumento. Per il kit più ampio di utilità quotidiane in cui si inserisce, il Toolkit per sviluppatori web raccoglie quelli che raggiungo di più.

Domande frequenti

Come faccio a trovare e sostituire con un'espressione regolare online? Inserisci il tuo pattern nel campo Trova senza barre, scrivi la sostituzione nel campo Sostituisci, scegli i tuoi flag e incolla il tuo testo L'output riscritto appare istantaneamente e mostra quante sostituzioni sono state eseguite Tutto accade nel tuo browser, quindi non viene caricato nulla.

Come funzionano i backreference del gruppo di acquisizione nella sostituzione? Le parentesi nel tuo modello creano gruppi numerati e li riutilizzi nella sostituzione con $ 1, $ 2 e così via. Ad esempio, il modello (\d{4})-(\d{2})-(\d{2}) con la sostituzione $ 3/$ 2/$ 1 trasforma il 15/01/2024. Gruppi con nome come (?\d{4}) sono indicati come $.

Come faccio a sostituire tutte le partite invece della sola prima? Abilita il flag g (globale) Senza di esso, JavaScript sostituisce solo la prima corrispondenza, esattamente come si comporta il metodo String.replace Con g abilitato, ogni corrispondenza nel testo viene sostituita, che è ciò di cui la maggior parte delle attività replace-all ha bisogno.

Come faccio a eliminare ogni partita invece di sostituirla? Lascia vuoto il campo Sostituisci Con il flag globale acceso, ogni corrispondenza viene rimossa dal testo Questo è il modo più pulito per eliminare tag, esecuzioni di spazi bianchi o caratteri indesiderati che condividono un modello.

Cosa significano i token speciali $&amp;, backtick e apostrofo nella sostituzione? $&amp; inserisce l'intera sottostringa abbinata, un backtick inserisce il testo prima della corrispondenza e un apostrofo inserisce il testo dopo di essa Per emettere un simbolo letterale del dollaro, scrivere $$. Questi seguono i modelli standard di sostituzione JavaScript String.replace.

Che sapore di regex utilizza questo strumento? Utilizza il motore RegExp JavaScript (ECMAScript) integrato nel browser, che è identico a quello in Node.js. I risultati qui corrispondono a come si comportano lo stesso modello e sostituzione in JavaScript e TypeScript. JavaScript regex differisce da PCRE, Python re e Java in alcune funzionalità avanzate.

Perché il mio sostituto produce letteralmente $ 1 invece del testo catturato? Un $1 letterale nell'output di solito significa che il tuo pattern non ha un primo gruppo di cattura, quindi non c'è nulla a cui fare riferimento $1. avvolgi la parte che desideri riutilizzare tra parentesi per creare il gruppo e conta i gruppi da sinistra a destra a partire da 1.

È sicuro eseguire regex replace su dati sensibili? Sì. Tutte le corrispondenze e le sostituzioni avvengono in JavaScript all'interno del browser, quindi nessun modello, sostituzione o testo viene inviato a nessun server, non viene registrato nulla e lo strumento funziona con la connessione disabilitata Puoi riformattare in modo sicuro file di registro, dati personali o formati proprietari.


Questa guida accompagna il libero Regex Sostituisci strumento su Toolz.dev - nessuna iscrizione, nessun caricamento, funziona offline.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!