Desenvolvimento

Teste uma expressão regular no seu texto

Digite um padrão e o seu texto. As ocorrências ficam destacadas enquanto você digita, e cada uma aparece listada abaixo com seus grupos de captura e sua posição. As flags são caixas de seleção, e o campo de substituição mostra o que a troca produziria antes de você rodar isso em algum lugar que importe.

0ocorrências
0grupos de captura
$1 e $2 são os grupos de captura. $& é a ocorrência inteira.

O que cada flag muda

Cinco caixas cobrem o que mais se usa, e cada uma muda o resultado, não o padrão.

Por que seu padrão casa com mais do que você queria

Os quantificadores são gulosos por padrão. <.*> contra <b>oi</b> leva a string inteira, porque .* pega tudo o que consegue e só devolve caracteres até o padrão conseguir terminar. Acrescentar um ponto de interrogação o deixa preguiçoso: <.*?> para no primeiro colchete de fechamento e devolve duas ocorrências em vez de uma.

A outra surpresa comum é o ponto, que não casa com quebra de linha a menos que você marque s. Um padrão testado em uma linha só e depois rodado sobre um arquivo devolve menos ocorrências sem avisar, e a correção costuma ser essa flag, não o padrão.

O que o campo de substituição entende

A substituição é a do JavaScript, então $1 até $9 são os grupos de captura, $& é a ocorrência inteira, e $<nome> funciona quando o grupo é nomeado com (?<nome>...). Um cifrão literal é $$.

Sem a flag g só a primeira ocorrência é substituída. Essa assimetria pega muita gente de surpresa, porque o destaque acima continua mostrando uma ocorrência e o resultado abaixo continua parecendo certo num exemplo curto.

Onde a regex é a ferramenta errada

HTML e XML são o exemplo clássico. As tags se aninham em qualquer profundidade, os atributos podem conter os caracteres que você está procurando, e os comentários podem ter qualquer coisa dentro, então um padrão que funciona no arquivo à sua frente falha no próximo. Use um parser. O navegador já traz o DOMParser.

Endereços de e-mail são o segundo. O padrão do campo acima é uma demonstração, não um validador: a gramática real da RFC 5322 aceita strings entre aspas, comentários e endereços que nenhum padrão simples aceita. Checar se existe uma @ com algo de cada lado e depois mandar uma mensagem de confirmação encontra mais erros reais do que qualquer padrão.

Padrões que travam a aba

O JavaScript usa um motor com retrocesso, e alguns padrões o fazem explorar um número explosivo de possibilidades. (a+)+$ contra trinta aes seguidas de um bê demora mais do que qualquer um vai esperar. Nada consegue interromper isso depois que começa, e por isso esta página testa no máximo 50.000 caracteres: com essa quantidade, até um padrão ruim termina.

A forma a vigiar é um quantificador dentro de outro quantificador onde os dois podem casar com os mesmos caracteres. Se um padrão parece lento numa string curta, costuma ser isso, e dividi-lo em duas passagens mais simples resolve.

O que fica na sua máquina

O padrão, o texto e a substituição são tratados pelo motor de expressões regulares do próprio navegador. Nada é enviado, e aqui isso importa mais do que em outras ferramentas: as pessoas testam padrões contra trechos de log, registros de clientes e dados de produção, e isso não deveria ser colado numa página que transmite.

Perguntas frequentes

Por que meu padrão substitui só a primeira ocorrência?

Porque a flag g está desligada. Sem ela o motor para na primeira ocorrência, e a substituição para junto. Marque a caixa g e todas as ocorrências são substituídas. É a surpresa mais comum com substituição em JavaScript, e é difícil de notar porque o destaque acima continua mostrando aquela única ocorrência corretamente.

Por que meu padrão para no fim de uma linha?

O ponto não casa com quebra de linha a menos que a flag s esteja ligada. Um padrão que funciona em uma linha e não devolve nada em um parágrafo quase sempre esbarra nisso. Marque s para o ponto atravessar as quebras. Atenção que a flag m é outra coisa: ela muda o que ^ e $ significam, e não mexe no ponto.

Posso usar grupos de captura nomeados?

Pode. Escreva como (?<nome>...) e eles aparecem na lista de ocorrências pelo nome além do número. No campo de substituição são escritos $<nome>. Grupos nomeados deixam um padrão longo legível meses depois, quando a diferença entre $3 e $4 já deixou de ser óbvia.

É a mesma regex que a minha linguagem usa?

É o motor do JavaScript, então casa com o que roda num navegador ou no Node. A maior parte do que você escreve é portável, mas lookbehind, grupos nomeados e os escapes de propriedade \\p{...} diferem entre linguagens, e Python, PCRE e Go têm cada um suas próprias extensões. Teste na linguagem em que vai publicar antes de confiar numa construção incomum.

Meu texto é enviado para algum lugar?

Não. O padrão e o texto passam pelo motor de expressões regulares do próprio navegador, na sua máquina, e nada é enviado. Isso importa aqui porque as pessoas testam padrões contra trechos de log e registros de clientes, que não deveriam ser colados numa página que os transmite.

Última atualização 4 de outubro de 2026