VSCode regex trova e sostituisce la matematica di invio?


205
%s@{fileID: \(213[0-9]*\)@\='{fileID: '.(submatch(1)-1900)@

Sto usando questa ricerca regex e sostituisco il comando in vim per sottrarre una costante da ogni ID corrispondente.

Posso trovare il regex in VSCode, ma come posso fare riferimento a submatchper la matematica e sostituire? submatch(1)non funziona in VSCode?

Grazie.

Risposte:



100

Per aumentare la risposta di Benjamin con un esempio:

Find        Carrots(With)Dip(Are)Yummy
Replace     Bananas$1Mustard$2Gross
Result      BananasWithMustardAreGross

Qualsiasi cosa tra parentesi può essere un'espressione regolare.


Questo mi ha ricordato che dovrei sfuggire alla parentesi se sto facendo una regex sull'istruzione if.
Orologio

65

Solo per aggiungere un altro esempio:

Stavo sostituendo src attr nei tag img html, ma dovevo sostituire solo l'src e mantenere qualsiasi testo tra la dichiarazione img e l'attributo src.

Ho usato lo strumento trova + sostituisci (ctrl + h) come nell'immagine: Trova e sostituisci


8
per me questo funziona in modo incoerente - sebbene le forcelle di selezione siano corrette, l'output a volte mantiene $1senza sostituzione
godblessstrawberry

1
Ciao @godblessstrawberry, puoi condividere le stringhe di ricerca e sostituzione?
Diogo Paschoal,

2
ciao @Diogo Stavo cercando di sostituire tutto il progetto \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"con myTranslate="$1"e saltando le chiavi in ​​modo casuale e inserendo a volte $ 1 anziché valore di gruppo. l'aggiornamento alla 1.28.0 ha risolto questo problema
godblessstrawberry,

Ho riscontrato lo stesso problema di @godblessstrawberry, eseguendo una sostituzione globale in tutti i miei file con regex '(e | o \ + | \ -) ​​\ n (*)' e la stringa di sostituzione '\ n $ 2 $ 1' a volte correttamente ha spostato l'operatore binario all'inizio della nuova riga ma in altri casi ha appena inserito $ 2 $ 1. Sembrerebbe essere un bug in VSCodium
Tom Close

@godblessstrawberry, controlla questo: github.com/microsoft/vscode/issues/81825 . Se non si applica a te, fornire ulteriori informazioni e aprire un problema lì.
Diogo Paschoal,

9

Nel mio caso $ 1 non funzionava, ma $ 0 funziona bene per il mio scopo.

In questo caso stavo cercando di sostituire le stringhe con il formato corretto per tradurle in Laravel, spero che questo possa essere utile a qualcun altro perché mi ci è voluto un po 'per risolverlo!

Search: (?<=<div>).*?(?=</div>)
Replace: {{ __('$0') }}

Regex Sostituisci stringa per traduzione Laravel


1
È possibile per te copiare la modifica del tuo post e copiare il codice anziché l'immagine? Sarebbe meglio per la visualizzazione.
Pankwood,

3

Per i principianti, la risposta accettata è corretta, ma un po 'concisa se non si ha familiarità con VSC o Regex.

Quindi, nel caso in cui questo sia il tuo primo contatto con:

Per trovare e modificare il testo,

  1. Nel passaggio "Trova", puoi usare regex con "gruppi di acquisizione" I want to find (group1) and (group2), ad es . Usando le parentesi. Questo troverebbe lo stesso testo di I want to find group1 and group2, ma con la differenza che puoi quindi fare riferimento group1e group2nel passaggio successivo:

  2. Nel passaggio "Sostituisci", puoi fare riferimento ai gruppi di acquisizione tramite $1, $2ecc., In modo da poter modificare la frase in I found $1 and $2 having a picnic, che genererebbeI found group1 and group2 having a picnic.

Appunti:

  • Invece di una semplice stringa, qualsiasi cosa dentro o fuori ()può essere un'espressione regolare.

  • $0 si riferisce all'intera partita


2

Un altro semplice esempio:

Search: style="(.+?)"
Replace: css={css`$1`}

Utile per convertire HTML in JSX con emotion / css!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.