Regex VSCode encontrar e substituir matemática de sub-correspondência?

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

Estou usando esse comando regex search and replace no vim para subtrair uma constante de cada ID correspondente.

Eu posso fazer o regex encontrar no VSCode, mas como posso referenciar o submatchpara maths & replace? submatch(1)não funciona no VSCode?

Obrigado.

Rakka Rage
fonte

Respostas:

344

Dada uma expressão regular, (foobar)você pode fazer referência ao primeiro grupo usando $1e assim por diante, se tiver mais grupos no campo de entrada substituir.

Benjamin Pasero
fonte
perguntou novamente de forma diferente aqui: stackoverflow.com/questions/35283300/…
Rakka Rage
4
Eu tive que substituir <p>(.*)</p>com <p>\n\t\t\t\t\t\t$1\n\t\t\t\t\t</p>um arquivo linha 2000. Imagine-me fazendo isso manualmente.
Bishwas Mishra
100

Para aumentar a resposta de Benjamin com um exemplo:

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

Qualquer coisa entre parênteses pode ser uma expressão regular.

Shaun Luttin
fonte
Este me lembrou que eu deveria escapar do parêntese se estiver fazendo uma expressão regex no if.
Clockwork
65

Apenas para adicionar outro exemplo:

Eu estava substituindo src attr nas tags img html, mas precisava substituir apenas o src e manter qualquer texto entre a declaração img e o atributo src.

Eu usei a ferramenta find + replace (ctrl + h) como na imagem: Encontre e substitua

Diogo Paschoal
fonte
8
para mim isso funciona de forma inconsistente - embora garfos seleção correta, a saída, por vezes, mantém $1sem substituição
godblessstrawberry
1
Olá, @godblessstrawberry, você pode compartilhar suas cadeias de pesquisa e substituição?
Diogo Paschoal
2
oi @Diogo Eu estava tentando substituir o projeto \[innerHtml\]\s*=\s*"'(.*)'\s*\|\s*translate\s*"em geral myTranslate="$1"e pulava as chaves aleatoriamente e inseria $ 1 em vez do valor do grupo às vezes. atualização para 1.28.0 resolveu este problema
godblessstrawberry
Encontrei o mesmo problema que @godblessstrawberry, fazendo uma substituição global em todos os meus arquivos com o regex '(e | ou \ + | \ -) ​​\ n (*)' e a sequência de substituição '\ n $ 2 $ 1' às vezes corretamente mudou o operador binário para o início da nova linha, mas em outros casos apenas inseriu $ 2 $ 1. Parece ser um bug no VSCodium
Tom Close
@godblessstrawberry, consulte: github.com/microsoft/vscode/issues/81825 . Se não for aplicável, forneça mais informações e abra um problema lá.
Diogo Paschoal
9

No meu caso, $ 1 não estava funcionando, mas $ 0 funciona bem para o meu propósito.

Nesse caso, eu estava tentando substituir as strings pelo formato correto para traduzi-las no Laravel. Espero que isso possa ser útil para outra pessoa, porque demorei um pouco para resolvê-las!

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

Regex Replace String for Laravel Translation

Ares9323
fonte
1
Isso é possível para você editar sua postagem e copiar o código em vez da imagem? Seria melhor para visualização.
Pankwood
3

Para iniciantes, a resposta aceita está correta, mas um pouco mais concisa se você não conhece o VSC ou o Regex.

Portanto, caso este seja seu primeiro contato com:

Para encontrar e modificar o texto,

  1. Na etapa "Localizar", você pode usar regex com "grupos de captura" I want to find (group1) and (group2), por exemplo , entre parênteses. Isso encontraria o mesmo texto que I want to find group1 and group2, mas com a diferença que você pode fazer referência group1e group2na próxima etapa:

  2. No "Substituir" etapa, você pode consultar os grupos de captura via $1, $2etc, para que você possa alterar a sentença I found $1 and $2 having a picnic, o que faria de saídaI found group1 and group2 having a picnic.

Notas:

  • Em vez de apenas uma string, qualquer coisa dentro ou fora da ()pode ser uma expressão regular.

  • $0 refere-se a toda a partida

Tedskovsky
fonte
2

Outro exemplo simples:

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

Útil para converter HTML para JSX com emoção / css!

Hedley Smith
fonte