Io corro Toolz.dev e trascorri la maggior parte della mia settimana nel codice del plugin WordPress, nelle API Laravel e nei front-end React Trova e sostituisci è la singola modifica che eseguo più di ogni altra, eppure nove volte su dieci non voglio la versione potente di esso Non voglio un'espressione regolare Voglio prendere un pezzo di testo, dire ogni occorrenza di un client's vecchio nome del prodotto, e scambiarlo con quello nuovo, esattamente, senza un carattere vagante nel mio termine di ricerca che corrisponda a qualcosa che non ho mai avuto intenzione di toccare Questo è ciò che il Trova e sostituisci lo strumento lo fa, e questa guida riguarda il motivo per cui la versione letterale e noiosa di trovare e sostituire è quella che desideri la maggior parte delle volte.
tl; dr: Questo strumento fa letterale trovare e sostituire su un blocco di testo incollato Il termine di ricerca corrisponde esattamente come digitato, quindi un punto e basta corrisponde a un punto e un segno di dollaro corrisponde a un segno di dollaro, senza fuga e senza sovra-corrispondenza accidentale È possibile aggiungere diverse regole di trovare e sostituire e applicarle in un passaggio, limitare le corrispondenze a parole intere e attivare o disattivare la sensibilità del caso Riporta quante sostituzioni ha fatto ogni regola Tutto viene eseguito nel browser, quindi non viene caricato nulla che incolli Quando hai veramente bisogno di caratteri jolly e gruppi di acquisizione, un replacer regex è invece lo strumento giusto.
Che cos'è il letterale trovare e sostituire, e perché & quot;literal" importa?
Trova e sostituisci è l'operazione di individuare ogni occorrenza di una stringa e scambiarla con un'altra Ogni editor ce l'ha Ciò che varia è il modo in cui lo strumento interpreta il termine di ricerca e quella singola scelta di progettazione decide se lo strumento ti aiuta o rovina silenziosamente il tuo testo.
Ci sono due scuole Un replicacer di espressioni regolari tratta il tuo termine di ricerca come uno schema, in cui determinati caratteri sono comandi: un punto significa & quot; qualsiasi carattere, & quot; un asterisco significa & quot; repeat, & quot; un simbolo del dollaro significa & quot; fine riga, & quot; e parentesi, parentesi e barre rovesciate hanno tutte un significato speciale Un replicatore letterale tratta il tuo termine di ricerca come se stesso, carattere per carattere, senza alcun significato speciale collegato a nulla.
Il più delle volte, letterale è quello che vuoi, ed ecco il motivo concreto Supponiamo di voler sostituire la stringa di versione 1.0.0 di 2.0.0 in un blocco di testo In uno strumento regex, quei punti sono caratteri jolly, quindi anche la tua ricerca corrisponde 1x0y0, 1a0b0, e altre corde che non hai mai inteso Dovreste sfuggire ai punti come 1\.0\.0 per renderlo sicuro, e se dimentichi, lo strumento fa qualcosa di sottilmente sbagliato e non ti avverte In uno strumento letterale, 1.0.0 mezzi 1.0.0, i punti sono punti, e non c'è niente da scappare e niente da sbagliare Lo stesso vale per un prezzo come $9.99, un percorso di file con barre rovesciate o uno snippet di codice con parentesi al suo interno Lo strumento letterale li gestisce tutti senza che tu pensi alla sintassi del pattern, perché non esiste una sintassi del pattern.
Quando dovrei usare invece un replacer regex?
Letterale è il giusto default, ma non è la risposta giusta a tutto, e preferirei dirvi dove si ferma piuttosto che fingere di no. Raggiungi per un strumento Regex replace quando la cosa che stai abbinando è una forma piuttosto che una stringa fissa Se devi abbinare ogni anno di quattro cifre, o ogni indirizzo email, o ogni riga che inizia con un hash, o vuoi riformattare il testo abbinato estraendone pezzi con gruppi di acquisizione, questo è il lavoro di pattern e uno strumento letterale non può farlo tester regex è il luogo in cui costruire ed eseguire il debug di quel modello prima di eseguirlo.
La linea di demarcazione è semplice Se riesci a digitare esattamente quello che stai cercando, usa il letteral find and replace e risparmiati l'escaping Se quello che stai cercando è una categoria di cose che condividono una forma ma non caratteri esatti, usa un regex La pulizia del testo più quotidiana è del primo tipo, motivo per cui lo strumento letterale copre la maggior parte dei lavori reali e lo strumento regex copre il resto.
| situazione | maneggiare | perché |
|---|---|---|
| Rinominare una parola o una frase fissa | Trovare e sostituire letterale | Il termine è esatto; non è necessario alcun modello |
Un termine di ricerca contenente punti, barre o $ |
Trovare e sostituire letterale | Nessuna fuga, nessuna corrispondenza accidentale con caratteri jolly |
| Fissare diversi termini diversi in una volta sola | Trovare e sostituire letterale, regole multiple | Ogni regola è esatta e applicata in ordine |
| Corrispondenza a qualsiasi anno, e-mail o forma del codice | Regex sostituisci | Solo un modello può descrivere una categoria |
| Riordinare o riformattare il testo abbinato | Regex sostituisci | I gruppi di cattura estraggono e riorganizzano i pezzi |
| Corrispondenza all'inizio della riga o ai confini della parola in base alla regola | Regex sostituisci | Ancoraggi e confini sono caratteristiche del modello |
Come funzionano più regole?
La funzione su cui mi appoggio di più è applicare diverse regole contemporaneamente La vera pulizia è raramente uno scambio Quando prendo il controllo di una copia client's, potrei aver bisogno di cambiare un nome di marca, correggere due errori di ortografia coerenti e rimuovere un pezzo di boilerplate, tutto nello stesso blocco di testo Fare in modo che come quattro passaggi separati sia noioso e soggetto a errori Lo strumento ti consente di aggiungere una riga per ogni coppia di ricerca e sostituzione e li applica in ordine, ciascuna regola agisce sull'output di quella precedente.
Vale la pena capire quell'ordinamento, perché è una caratteristica, non un incidente. Dite che la regola uno sostituisce foo di bar, e la regola due sostituisce bar di baz. Poiché la regola due funziona sul risultato della regola uno, testo iniziato come foo finisce come baz. La maggior parte delle volte le tue regole sono indipendenti e l'ordine non ha importanza, ma quando interagiscono, il comportamento è prevedibile: dall'alto verso il basso, ciascuna sul risultato precedente. Lo strumento ti mostra anche un conteggio per ciascuna regola, quindi puoi confermare che la regola tre corrispondeva a qualcosa e non è seduto lì a non fare nulla a causa di un errore di battitura nel termine di ricerca.
Cosa fanno le opzioni di parole intere e casi?
Due opzioni gestiscono i casi in cui uno scambio semplice è troppo smussato.
La sensibilità al caso decide se Cat, CAT, e cat sono la stessa parola o tre diverse È spento per impostazione predefinita, perché la maggior parte della pulizia vuole catturare un termine indipendentemente da come è stato capitalizzato Accendilo quando la maiuscola è il punto centrale: quando vuoi cambiare un'ortografia di un nome senza toccarne un altro, o quando stai lavorando con il codice dove value e Value sono identificatori diversi.
La corrispondenza di parole intere decide se il termine di ricerca deve stare da solo piuttosto che stare all'interno di una parola più lunga Questa è l'opzione che ti salva dal classico disastro "trova e sostituisci" Se sostituisci cat di dog senza corrispondenza di parole intere, ti giri anche category dentro dogegory e scatter dentro sdogter. Con la corrispondenza dell'intera parola, solo la parola autonoma cat viene sostituito e le parole più lunghe vengono lasciate da sole Lo strumento rileva i confini delle parole utilizzando lettere e numeri Unicode anziché la definizione solo ASCII, quindi una parola accentata come café viene trattato come una singola parola e i suoi confini si trovano correttamente, che è un'implementazione ingenua che utilizza il classico \b boundary sbaglierebbe.
C'è un punto più ampio qui su come gli strumenti di testo devono rispettare Unicode, di cui mi occupo nel Guida agli strumenti di testo: trattare il testo come byte piuttosto che come caratteri percepiti dall'utente è da dove proviene un numero sorprendente di bug degli strumenti.
Come lo uso nel lavoro reale
Qualche schema viene fuori ancora e ancora Quando incollo il testo da un PDF o da un'email, spesso arriva con un termine scritto in modo incoerente, e una regola letterale risolve ogni istanza Quando migro un client's content, configuro una pila di regole per il nome del marchio, il vecchio dominio e un paio di frasi ricorrenti, e le eseguo tutte in una volta Quando pulisco i dati prima di importarli, uso regole per eliminare un prefisso ripetuto o un carattere marcatore vagante, sostituendolo con nulla, che è solo una regola con una sostituzione vuota.
Si abbina naturalmente agli altri strumenti di testo Spesso appiattisco il testo incollato con rimuovere interruzioni di riga innanzitutto, quindi esegui trova e sostituisci il risultato. Quando il lavoro riguarda davvero il cambiamento della forma delle parole anziché lo scambio, il convertitore case è la soluzione migliore e quando deduplica un elenco raggiungo il duplicate line remover invece. Sapere quale strumento è per quale lavoro è la metà della velocità, e c'è un resoconto più ampio di ciò nel Strumenti di produttività per sviluppatori guida.
L'ultima cosa, e il motivo per cui li ho costruiti per essere eseguiti nel browser, è la privacy Il testo che incolli in uno strumento di ricerca e sostituzione è spesso una bozza, un client' s copia non pubblicata, una trascrizione o dati che non hai attività di caricamento su un server casuale Tutto ciò che questo strumento fa accade in JavaScript sul tuo computer Nulla viene trasmesso, registrato o archiviato e puoi confermarlo disconnettendoti dalla rete e guardando lo strumento continuare a funzionare.
Un esempio pratico: rinominare un prodotto in una pagina
Lasciami rendere concreta l'idea delle regole multiple, perché è la parte sottoutilizzo delle persone. Di' un cliente rinominato da & quot; QuickBooks Lite" a & quot;Ledgerly e quot; spostato da oldsite.com a ledgerly.app, e la loro vecchia copia continuava a scrivere & quot; e-mail" con un trattino mentre la nuova guida di stile vuole & quot; e-mail." Si tratta di tre modifiche indipendenti e le imposterei come tre regole in un passaggio anziché tre viaggi attraverso lo strumento.
La regola uno trova QuickBooks Lite e lo sostituisce con Ledgerly. La regola due trova oldsite.com e lo sostituisce con ledgerly.app; nota che i punti in entrambi i domini sono letterali qui, quindi non devo sfuggire a nulla, mentre uno strumento regex tratterebbe oldsite.com come corrispondenza oldsiteXcom così come. La regola tre trova e-mail e lo sostituisce con email. Incollo la pagina, le eseguo tutte e tre e il conteggio accanto a ciascuna regola mi dice che il nome del marchio è cambiato nove volte, il dominio è cambiato quattro volte e la correzione del trattino ha colpito due volte Se la regola tre mostrasse zero, saprei che la copia non conteneva l'ortografia con trattino e potrei eliminare la regola.
I conteggi sono l'eroe silenzioso di questo flusso di lavoro Senza di loro ti fidi che ogni regola ha fatto il suo lavoro; con loro ottieni un feedback immediato che un termine di ricerca era giusto o sbagliato Uno zero in cui ti aspettavi corrispondenze è quasi sempre un errore di battitura nel campo di ricerca o una mancata corrispondenza di capitalizzazione che puoi correggere alternando la sensibilità del caso.
Come funziona il matching?
Vale la pena sapere un po 'di ciò che accade sotto il cofano, perché spiega alcuni comportamenti che altrimenti potresti trovare sorprendenti Lo strumento scansiona il testo da sinistra a destra In ogni posizione controlla se il tuo termine di ricerca corrisponde a partire da lì Se lo fa, e qualsiasi condizione di tutta la parola è soddisfatta, scrive la sostituzione e salta oltre il testo abbinato Se non lo fa, copia un carattere e si sposta di uno. Questo è il motivo per cui la sostituzione non è ricorsiva all'interno di un'unica regola: quando scrive la sostituzione, continua a scansionare dopo di essa, non al suo interno, quindi sostituendo aa di a nella stringa aaa ti dà aa piuttosto che crollare fino a a. Se vuoi il collasso, esegui la regola due volte, che è esattamente ciò che fa una seconda regola con lo stesso find and replace.
La corrispondenza senza distinzione tra maiuscole e minuscole viene eseguita carattere per carattere anziché prima inserendo in minuscole l'intera stringa. Sembra un dettaglio dell'implementazione, ma è importante per la correttezza: alcuni caratteri cambiano lunghezza quando sono in minuscole e il confronto di intere stringhe in minuscole eliminerebbe le posizioni dall'allineamento e corromperebbe l'output. Confrontando un carattere alla volta si mantiene onesto ogni indice. I confini dell'intera parola vengono controllati rispetto ai caratteri immediatamente prima e dopo una corrispondenza, trattando qualsiasi lettera o numero Unicode come parte di una parola, che è ciò che consente agli script accentati e non latini di comportarsi come ci si aspetterebbe.
Niente di tutto questo è qualcosa a cui devi pensare nell'uso quotidiano Ma è la differenza tra uno strumento che fa tranquillamente la cosa sbagliata su una custodia edge e uno di cui ti puoi fidare con un client's copia, ed è il motivo per cui preferirei usare un replicatore letterale appositamente costruito piuttosto che incollare il testo in una casella regex e spero che il mio termine di ricerca non contenga un carattere speciale.
Domande frequenti
Come faccio a trovare e sostituire il testo senza utilizzare regex?
Incolla il tuo testo nello strumento, digita la frase esatta da trovare e la frase esatta con cui sostituirla ed eseguila La ricerca è letterale, quindi ogni carattere digitato viene abbinato come se stesso e non è necessario sfuggire a nulla Ogni occorrenza viene scambiata e ottieni un conteggio di quante modifiche sono state apportate, tutte nel tuo browser senza che nulla venga caricato.
Posso sostituire diverse parole diverse contemporaneamente?
Sì. Aggiungi una riga per ogni coppia "trova e sostituisci" e lo strumento li applica in sequenza, ognuno agendo sul risultato della regola che lo precede. È così che rinomini un marchio, correggi due errori di ortografia e rimuovi un pezzo di boilerplate in un unico passaggio e ogni regola mostra il proprio conteggio di sostituzione in modo da poter vedere che corrispondeva.
Qual è la differenza tra questo e uno strumento di sostituzione regex?
Questo strumento corrisponde letteralmente al termine di ricerca, quindi un punto corrisponde solo a un punto e un simbolo del dollaro solo a un segno del dollaro, senza sintassi del modello da imparare e senza sovra-corrispondenza accidentale Uno strumento di sostituzione regex tratta il termine di ricerca come un modello con caratteri jolly, ancore e gruppi di acquisizione, che è ciò di cui hai bisogno per abbinare una categoria di cose come qualsiasi anno o qualsiasi indirizzo email Usare letterale quando puoi digitare la cosa esatta che desideri; usa regex quando stai abbinando una forma.
In che modo la corrispondenza di intere parole arresta le sostituzioni indesiderate?
Con la corrispondenza di un'intera parola attiva, il termine di ricerca viene sostituito solo quando si trova da solo anziché all'interno di una parola più lunga Sostituzione cat poi cambia cat ma lascia category, scatter, e located intatto Lo strumento utilizza confini consapevoli di Unicode, quindi le parole accentate e non inglesi vengono gestite correttamente anziché essere divise nel posto sbagliato.
Troverà e sostituirà la modifica delle interruzioni di riga o della spaziatura?
No. Vengono modificati solo i caratteri che hai cercato Interruzioni di riga, rientro, spaziatura e punteggiatura attorno alle tue partite vengono lasciati esattamente come erano Se la sostituzione è più lunga o più corta dell'originale, il testo circostante cambia naturalmente, ma nient'altro viene riformattato o riflowato.
C'è un limite alla quantità di testo che posso elaborare?
Non esiste un limite fisso oltre la memoria del tuo browser's. Poiché il lavoro avviene sul tuo dispositivo anziché su un server, i blocchi di centinaia di migliaia di caratteri vengono elaborati quasi istantaneamente e non è previsto un limite alle dimensioni di caricamento. Per qualcosa delle dimensioni di un intero libro potresti notare una breve pausa, ma i documenti ordinari sono effettivamente istantanei.
Il mio testo viene caricato o archiviato ovunque?
No. Il testo viene elaborato da JavaScript nel browser e non viene mai trasmesso, registrato o archiviato È possibile verificarlo aprendo la scheda di rete mentre si esegue una sostituzione, o disconnettendosi da internet, poiché lo strumento continua a funzionare offline una volta caricata la pagina Questo è il motivo per utilizzare uno strumento lato client per bozze, copia client e qualsiasi cosa privata.



