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.