Dicas para usar regex avançado em buscas e refatorações no VSCode
1. Fundamentos do Regex no VSCode
1.1 Ativando o modo regex na busca e substituição
O VSCode oferece suporte nativo a expressões regulares no painel de busca (Ctrl+F para busca local, Ctrl+Shift+F para busca global). Para ativar o modo regex, clique no ícone .* ao lado do campo de busca ou pressione Alt+R. A substituição é ativada pressionando Ctrl+H (local) ou expandindo o painel de busca global.
Exemplo de busca simples com regex:
Buscar: \d{3}-\d{3}-\d{4}
Substituir: ($1) $2-$3
1.2 Diferenças entre regex padrão e o engine ECMAScript do VSCode
O VSCode utiliza o engine ECMAScript (JavaScript) para regex. Isso significa que recursos como lookbehind positivo ((?<=...)) e negativo ((?<!...)) são suportados, mas com limitações: não é possível usar quantificadores variáveis dentro de lookbehinds. Além disso, o VSCode não suporta \K (reset de match) ou \G (âncora de posição anterior).
1.3 Flags essenciais
As flags são inseridas no final do padrão regex dentro do campo de busca:
g(global): encontra todas as ocorrências, não apenas a primeirai(case-insensitive): ignora diferenças entre maiúsculas e minúsculasm(multiline): faz com que^e$correspondam ao início/fim de cada linha
Exemplo prático:
Buscar: ^\s*\/\/.*$ # encontra linhas de comentário
Flag: gm # global e multiline
2. Grupos de Captura e Substituição Inteligente
2.1 Usando parênteses para captura e referência
Os grupos de captura são definidos com parênteses () e referenciados na substituição com $1, $2, etc.
Buscar: (\w+)@(\w+)\.(\w+)
Substituir: $1 [arroba] $2 [ponto] $3
2.2 Grupos nomeados
Grupos nomeados permitem referências mais legíveis:
Buscar: (?<nome>\w+)@(?<dominio>\w+)\.(?<tld>\w+)
Substituir: ${nome} [arroba] ${dominio} [ponto] ${tld}
2.3 Substituição condicional com lookahead/lookbehind
Use lookahead para garantir contexto sem capturar:
Buscar: (\w+)(?=\s*=\s*null)
Substituir: $1 ?? 'valor_padrao'
Isso substitui apenas variáveis seguidas por = null, sem consumir o espaço ou o null.
3. Lookahead e Lookbehind para Buscas Contextuais
3.1 Lookahead positivo e negativo
Lookahead positivo ((?=...)) verifica se algo vem depois; negativo ((?!...)) verifica se algo NÃO vem depois.
Buscar: \b\w+\b(?=\s*=\s*function) # encontra nomes de funções
3.2 Lookbehind positivo e negativo
Lookbehind positivo ((?<=...)) verifica se algo vem antes; negativo ((?<!...)) verifica se algo NÃO vem antes.
Buscar: (?<!\$)\b\d+\b # encontra números que NÃO estão precedidos por $
3.3 Exemplos práticos
Encontrar imports sem uso:
Buscar: import\s+(\w+)\s+from\s+['"].*?['"];(?![\s\S]*?\b\1\b)
Encontrar variáveis não inicializadas:
Buscar: ^\s*(let|const|var)\s+(\w+)\s*;(?![^;]*=)
4. Refatoração de Código com Regex e Multi-Cursor
4.1 Combinando regex com multi-cursor
Após uma busca regex, pressione Ctrl+Shift+L para selecionar todas as ocorrências encontradas. Use multi-cursor para editar simultaneamente.
Buscar: \bconsole\.log\(.*?\);?
Selecione todas e pressione Delete para remover todos os logs de debug de uma vez.
4.2 Refatoração de nomes com padrões complexos
Para renomear variáveis que seguem um padrão específico:
Buscar: \b_oldPrefix(\w+)\b
Substituir: newPrefix$1
4.3 Remoção de comentários e linhas duplicadas
Remover comentários de linha única:
Buscar: ^\s*\/\/.*$\n?
Substituir: (vazio)
Remover linhas duplicadas consecutivas:
Buscar: ^(.+)$\n^\1$
Substituir: $1
5. Padrões Avançados para Busca em Arquivos e Pastas
5.1 Uso de âncoras e classes de caracteres
Âncoras e classes são essenciais para buscas precisas em projetos grandes:
Buscar: ^\s*(public|private|protected)\s+\w+\s+\w+\s*\( # encontra métodos
Classes de caracteres:
Buscar: \b[A-Z][a-z]+\b # encontra palavras iniciadas com maiúscula (possíveis classes)
5.2 Quantificadores não-gulosos
Use *?, +?, ?? para evitar capturas excessivas:
Buscar: <div[^>]*>.*?</div> # guloso: captura até a última div
Buscar: <div[^>]*>.*?</div> # não-guloso: captura até a primeira </div>
5.3 Filtros de arquivos e pastas
No painel de busca global, use o campo "files to include" e "files to exclude":
Incluir: src/**/*.js, src/**/*.ts
Excluir: node_modules, dist, *.test.js
Exemplo de busca filtrada:
Buscar: \brequire\(['"].*?['"]\)
Incluir: src/**/*.js
Excluir: node_modules
6. Expressões Regulares para Migração de Código
6.1 Substituição de var para let/const
Buscar: \bvar\s+(\w+)\s*=\s*(['"`]|true|false|null|\d+)
Substituir: const $1 = $2
Para variáveis que podem ser reatribuídas:
Buscar: \bvar\s+(\w+)\s*=\s*(?!['"`]|true|false|null|\d+)
Substituir: let $1 =
6.2 Conversão de chamadas de API obsoletas
Buscar: \b\.success\((\w+)\)
Substituir: .then($1)
6.3 Normalização de formatação de datas
Buscar: (\d{2})/(\d{2})/(\d{4})
Substituir: $3-$2-$1 # converte DD/MM/AAAA para AAAA-MM-DD
7. Boas Práticas e Armadilhas Comuns
7.1 Testando regex com preview
Sempre use o preview do VSCode (pressione Ctrl+Enter no campo de busca) para visualizar todas as ocorrências antes de aplicar a substituição. O preview destaca cada match e mostra o resultado da substituição.
7.2 Evitando regex muito complexos
Regex excessivamente complexos são difíceis de manter e propensos a erros. Para padrões muito elaborados, use ferramentas como Regex101 ou RegExr para testar e depurar. Considere também usar extensões como "Regex Previewer" para testar dentro do próprio VSCode.
7.3 Salvando regex frequentes como snippets
Crie snippets personalizados no VSCode para regex que você usa com frequência:
Arquivo: snippets.code-snippets
Conteúdo:
{
"Remover console.log": {
"prefix": "rcl",
"body": "\\bconsole\\.log\\(.*?\\);?",
"description": "Regex para encontrar console.log"
}
}
Você também pode usar extensões como "Find and Transform" para criar buscas regex reutilizáveis com atalhos de teclado.
Referências
- Documentação oficial do VSCode sobre busca e substituição — Guia completo sobre as funcionalidades de busca, incluindo modo regex, filtros e substituição.
- Regex101: testador de expressões regulares online — Ferramenta interativa para testar e depurar regex com explicações detalhadas de cada parte do padrão.
- MDN Web Docs: Expressões Regulares (JavaScript) — Referência completa sobre o engine ECMAScript usado pelo VSCode, com exemplos e documentação de todos os recursos.
- Extensão "Find and Transform" para VSCode — Extensão que permite criar buscas regex avançadas com substituição, atalhos de teclado e salvamento de padrões frequentes.
- Tutorial de Regex Avançado no VSCode (dev.to) — Artigo técnico com exemplos práticos de uso de regex para refatoração, incluindo lookahead, lookbehind e grupos nomeados.