Como usar
- Digite o padrão sem as barras. O exemplo encontra datas escritas como 2026-11-10.
- Marque os modificadores de que precisar. g encontra todas as ocorrências, i ignora maiúsculas e minúsculas, e m e s mudam a forma como as quebras de linha são lidas.
- Cole o seu texto de teste. As ocorrências ficam destacadas na hora, e a lista embaixo do texto mostra a posição e os grupos de cada uma.
- Digite um texto em Substituir por para ver o resultado, depois use Copiar para levá-lo.
Como a busca funciona aqui
A página usa o mecanismo de expressões regulares embutido no seu navegador, o mesmo que o JavaScript usa. As ocorrências são encontradas em ordem, a partir do começo do texto. A posição mostrada é a contagem de caracteres antes da ocorrência, começando em 0, contada em unidades UTF-16, como o JavaScript conta o texto.
A busca roda em um processo em segundo plano do navegador, então a página continua respondendo. Uma busca para depois de 10.000 ocorrências, e um texto com mais de 200.000 caracteres não é pesquisado. Um padrão que pode não encontrar nada, como x*, avança um caractere depois de cada ocorrência vazia, então a busca sempre termina. Uma busca que leva mais de 2 segundos é interrompida; veja a seção sobre retrocesso catastrófico.
- Sem o modificador g, só a primeira ocorrência é mostrada, como faz String.match().
- O modificador u lê um emoji, ou qualquer outro caractere fora do plano básico, como um só caractere.
- O modificador d acrescenta o início e o fim de cada grupo à lista.
Retrocesso catastrófico e o limite de 2 segundos
Um mecanismo de expressões regulares tenta, uma após outra, as formas como um padrão poderia encontrar uma ocorrência. Com alguns padrões, principalmente um grupo repetido dentro de outro grupo repetido, como (a+)+, o número de formas cresce muito depressa: cada caractere a mais pode dobrar o trabalho. Isso acontece sobretudo quando o texto quase casa e falha só no final.
Por exemplo, o padrão (a+)+$ em um texto com muitas letras a seguidas de um ponto de exclamação não pode casar, porque $ exige o fim do texto. O mecanismo ainda assim tenta cada forma de dividir as letras antes de desistir. Com cerca de 26 letras, a busca já pode levar um segundo ou mais em um computador comum, e cada letra a mais a deixa bem mais lenta. O tempo depende do seu aparelho.
Esta página roda cada busca em um processo em segundo plano e a interrompe depois de 2 segundos, mostrando uma mensagem. O resto da página continua funcionando, então você pode mudar o padrão ou o texto e tentar de novo.
- Não coloque uma repetição dentro de outra sobre os mesmos caracteres: escreva (a+)$ em vez de (a+)+$. No mesmo texto, o padrão seguro termina de imediato.
- Seja específico: use [a-z] ou \d+ dentro de um grupo em vez de um ponto, para que as partes de uma ocorrência não se sobreponham de muitos jeitos.
- Teste o padrão primeiro em um trecho curto do texto, depois no texto inteiro.
- Ancore o padrão quando puder: ^ no início e $ no fim impedem o mecanismo de tentar cada ponto de partida.
Padrões de substituição
O texto de substituição segue as regras de String.replace() do JavaScript. Um cifrão inicia um código que é trocado pelo texto encontrado:
| Você escreve | É trocado por |
|---|---|
| $1, $2 e assim por diante | O texto do grupo numerado |
| $& | A ocorrência inteira |
| $` | O texto antes da ocorrência |
| $' | O texto depois da ocorrência |
| $$ | Um único cifrão |
| Um cifrão, um sinal de menor, o nome do grupo e um sinal de maior | O texto do grupo nomeado |
Diferenças em relação ao PCRE e ao .NET
Um padrão escrito para PCRE (PHP, muitas ferramentas do Linux) ou para .NET (C#, Visual Basic) costuma funcionar aqui, mas alguns recursos existem só em um dos mecanismos. A tabela lista os que mais importam.
| Recurso | JavaScript (esta página) | PCRE e .NET |
|---|---|---|
| Grupos atômicos e quantificadores possessivos | Não disponível | Grupos atômicos no PCRE e no .NET; quantificadores possessivos, como a++, no PCRE |
| As âncoras \A, \Z e \z | Não disponível: use ^ e $ | Disponível |
| Grupo nomeado escrito como (?P<…>) | Não disponível | Disponível no PCRE |
| Opção embutida, como (?i) dentro do padrão | Não disponível: defina o modificador | Disponível no .NET |
| Deixar um texto fora da ocorrência com \K | Não disponível | Disponível no PCRE |
| Substituir um grupo nomeado | Cifrão, sinal de menor, nome, sinal de maior | .NET usa cifrão, chave, nome, chave |
Exemplo resolvido: três datas em um texto
O padrão de exemplo tem três grupos nomeados: quatro dígitos para o ano, dois para o mês e dois para o dia, separados por traços. O texto de exemplo é o que a página mostra ao abrir, em inglês: Invoice dated 2026-11-10, paid on 2026-12-03. Due 2027-01-15. Nele, as três datas aparecem nas posições 14, 34 e 50, contadas a partir de 0 na primeira letra.
Com a substituição feita com os três nomes de grupo, day, month e year (cada um precedido de cifrão e colocado entre sinal de menor e sinal de maior), as três datas são reescritas como 10.11.2026, 03.12.2026 e 15.01.2027. O resultado diz: Invoice dated 10.11.2026, paid on 03.12.2026. Due 15.01.2027.
Perguntas frequentes
Qual variante de expressões regulares este testador usa?
Ele usa o mecanismo de JavaScript embutido no seu navegador. A maioria dos padrões de busca, validação e limpeza de texto funciona igual em JavaScript, PCRE e .NET, mas alguns recursos diferem, como mostra a seção de diferenças.
Por que a lista para em 10.000 ocorrências?
As ocorrências são reunidas em ordem. Uma lista muito longa seria lenta para desenhar e longa demais para ler, então, quando um padrão encontra mais vezes, as primeiras 10.000 ocorrências são mostradas e a página informa que a busca parou.
Por que meu texto é recusado quando tem mais de 200.000 caracteres?
Um texto muito longo deixa a página lenta, e um padrão pode levar muito tempo nele. Teste o padrão primeiro em uma parte do texto, depois no resto, ou divida o texto em pedaços menores.
Por que o destaque pula algumas ocorrências?
Uma ocorrência sem nenhum caractere, como o espaço vazio que x* encontra entre letras, não tem o que destacar. Ela continua na lista com a sua posição, então você ainda vê onde ela está.
O testador envia meu texto para algum servidor?
Não. A busca roda no seu navegador, e a página não guarda o que você digita nem envia para algum lugar. Ao fechar a página, tudo é apagado.
O que significa a mensagem sobre um padrão inválido?
O padrão não pode ser lido como expressão regular do JavaScript. A mensagem vem do mecanismo, em inglês, e diz qual é o problema, por exemplo um colchete que nunca é fechado.
Posso testar aqui um padrão escrito para PCRE ou .NET?
Muitas vezes, sim, quando ele usa só recursos comuns. Se tiver um grupo atômico, um quantificador possessivo, \A ou \z, ou uma opção embutida, reescreva essa parte para JavaScript antes; a tabela mostra quais são esses recursos.
Por que a página diz que o padrão levou tempo demais?
A busca não terminou em 2 segundos neste texto, então a página a interrompeu. Isso normalmente quer dizer um padrão com uma repetição dentro de outra, como (a+)+, em um texto que quase casa. A seção sobre retrocesso catastrófico mostra uma forma mais segura.
Fontes
- MDN (em inglês): Regular expressions in JavaScript, including flags and groups
- MDN (em inglês): String.prototype.replace(), the replacement patterns
- PCRE2 (em inglês): pattern syntax (the PCRE documentation)
- Microsoft (em inglês): .NET regular expression language quick reference
Números e texto verificados pela última vez em terça-feira, 10 de novembro de 2026.