Testador de regex
Teste expressões regulares com destaque das correspondências ao vivo.
Sobre esta ferramenta
Escreva uma expressão regular JavaScript, ative ou desative flags e veja cada correspondência destacada enquanto digita, junto com os grupos de captura e uma pré-visualização da substituição.
Como usar
- Digite uma expressão regular no campo do padrão, sem as barras ao redor.
- Ative ou desative as flags: g para todas as correspondências, i para ignorar maiúsculas e minúsculas, m para âncoras multilinha, s para que . corresponda a quebras de linha, u para Unicode.
- Cole um texto de teste e veja cada correspondência destacada, com os grupos de captura listados abaixo.
- Ative Substituir para pré-visualizar uma substituição usando $1, $2 ou $<name>.
Perguntas
- Qual é o sabor de regex usado?
- JavaScript (ECMAScript). Para padrões do dia a dia, é muito parecido com PCRE e Python, mas o suporte a lookbehind, a sintaxe de grupos nomeados e alguns escapes variam entre as linguagens.
- Como faço para corresponder a um ponto ou colchete literal?
- Escape com uma barra invertida: \. corresponde a um ponto, \( a um parêntese, \[ a um colchete. Dentro de uma classe de caracteres como [.], a maioria dos caracteres perde o significado especial.
- Qual é a diferença entre .* e .*?
- .* é guloso e corresponde ao máximo possível; .*? é preguiçoso e corresponde ao mínimo possível. A correspondência preguiçosa costuma ser o que você quer ao extrair texto entre dois marcadores.
- Como funcionam os grupos nomeados?
- Escreva (?<name>...) para capturar em um grupo nomeado. O valor dele aparece nos detalhes da correspondência e você pode usá-lo em uma substituição como $<name>.
- Por que minha regex corresponde a uma string vazia?
- Um padrão em que tudo é opcional, como a* ou (\d+)?, pode corresponder a zero caracteres, e faz isso em cada posição onde nada mais longo se encaixa. A tabela Detalhes da correspondência mostra essas correspondências como (vazio). Use + em vez de *, ou torne pelo menos uma parte do padrão obrigatória.
- Como usar a correspondência inteira em uma substituição?
- Escreva $& para a correspondência inteira, $1 e $2 para grupos numerados, $<name> para grupos nomeados e $$ para um cifrão literal. Por exemplo, substituir \d+ por [$&] coloca cada número entre colchetes. Ative a flag g para substituir todas as ocorrências, e não só a primeira.
- Uma regex pode travar o navegador?
- Sim. Quantificadores aninhados, como (a+)+ ou (\w+\s?)*$, podem fazer backtracking exponencial em textos que quase correspondem, o que se chama backtracking catastrófico. A correspondência roda na aba do seu navegador, então a página pode travar até você fechá-la. Reescreva o padrão para que cada caractere só possa corresponder de uma maneira, por exemplo a+ em vez de (a+)+.
Flags de regex explicadas: g, i, m, s e u
As flags de regex mudam o comportamento do padrão inteiro. g (global) encontra todas as correspondências em vez de parar na primeira. Sem ela, este testador destaca só a primeira correspondência e Substituir troca só a primeira ocorrência, exatamente como o String.replace do JavaScript. i ignora maiúsculas e minúsculas, então /error/i corresponde a Error e ERROR. m faz ^ e $ corresponderem ao início e ao fim de cada linha, o que você precisa ao testar um padrão em um arquivo de log.
A flag s, chamada dotall, faz o . corresponder também a quebras de linha, então <p>.*?</p> pode abranger várias linhas. A flag u ativa o modo Unicode: emoji e outros caracteres fora do Plano Multilíngue Básico contam como um caractere, os escapes de propriedades Unicode ficam disponíveis e escapes desconhecidos, como \- fora de uma classe de caracteres, viram erros em vez de serem aceitos em silêncio. A flag sticky y e a flag d para índices das correspondências não estão disponíveis aqui.
Como testar uma regex com dados reais
Teste uma expressão regular com amostras realistas, não só com o caso ideal. Cole um texto que inclua valores que devem corresponder e valores que não devem, e observe o destaque. Para uma data ISO, comece com \d\d\d\d-\d\d-\d\d e confira se 2026-11-08 é destacado enquanto 2026-1-8 não é. Depois repare que 12026-11-08 ainda corresponde em parte. Adicionar limites de palavra \b, ou ^ e $ com a flag m, resolve isso.
A tabela Detalhes da correspondência lista cada correspondência com seu índice e grupos de captura, numerados como $1, $2 e assim por diante, além dos grupos nomeados pelo nome, o que é a forma mais rápida de conferir se um grupo captura o que você espera. Para endereços de e-mail, aceite que nenhuma regex prática segue totalmente a RFC: um padrão como [\w.+-]+@[\w-]+\.[\w.-]+ pega erros de digitação, e um e-mail de confirmação faz a verificação de verdade. Para desmontar uma URL, use Codificar, decodificar e analisar URLs.
Como usar uma regex testada em JavaScript, Python e grep
Um padrão testado aqui pode ir direto para um literal de regex em JavaScript, como /\d+/g, sem escape extra. Quando você o monta a partir de uma string, como com new RegExp() ou na maioria das outras linguagens, cada barra invertida precisa ser duplicada, então \d+ vira "\\d+" dentro de um literal de string comum. Raw strings do Python, como r"\d+", e strings com crase em Go evitam a duplicação. Esquecer isso é o motivo mais comum de uma regex funcionar no testador, mas não no código.
As flags ficam em lugares diferentes em outras linguagens. O Python usa re.IGNORECASE ou um (?i) inline, e o grep usa -i para maiúsculas e minúsculas, com -E ou -P escolhendo a sintaxe. O lookbehind também muda: o JavaScript permite lookbehind de tamanho variável, enquanto o módulo re do Python exige largura fixa, então (?<=\$|USD )\d+ falha lá. O Gerador de comandos grep e ripgrep transforma um padrão testado em um comando pronto para rodar, com cada flag explicada.
Algo não está funcionando ou um resultado parece errado? Relatar um problema com esta ferramenta