Testador de regex
Teste expressões regulares JavaScript ao vivo. Veja as correspondências destacadas e os grupos de captura listados.
Correspondências destacadas
Correspondências e grupos
- Digite o padrão de regex no campo acima (sem precisar envolvê-lo em barras).
- Alterne os sinalizadores que quiser: g para todas as correspondências, i para ignorar maiúsculas, etc.
- Cole ou digite o texto de teste na caixa "String de teste".
- Veja as correspondências destacadas em tempo real; confira os grupos capturados na tabela abaixo.
O que ele faz?
Este testador roda seu padrão contra a string de teste usando o motor RegExp nativo do navegador — o mesmo que Node.js, Deno e qualquer navegador usam. As correspondências são destacadas em linha. Grupos de captura numerados e nomeados são extraídos para uma tabela, assim você vê exatamente o que cada trecho entre parênteses capturou.
Exemplo
Padrão (com sinalizador g):
\b(\w+)@(\w+\.\w+)\b String de teste:
Contact us at [email protected] or [email protected]. Not an email: foo@bar (no TLD). Correspondências:
1 [email protected] $1: hello $2: example.com
2 [email protected] $1: support $2: happycoder.dev foo@bar não corresponde porque \w+\.\w+ exige um ponto no domínio.
Por que minha regex não está correspondendo?
- Esqueceu do sinalizador g. Sem ele, só a primeira correspondência é retornada. /cat/.exec("cat cat") acha uma "cat"; /cat/g acha as duas.
- Metacaracteres sem escape. example.com também corresponde a examplexcom porque . casa qualquer caractere. Escape: example\.com.
- Correspondência gulosa pega demais. <.*> sobre <a><b> leva tudo. Use a forma preguiçosa <.*?> ou a classe negada <[^>]*> para parar no primeiro >.
- Confusão de limite de palavra. \b é uma posição entre um caractere de palavra e um não-palavra. Padrões como \bfoo-bar\b falham porque o - no meio já é um limite não-palavra.
- Diferença de caixa. [a-z]+ não vai casar com Hello. Acrescente o sinalizador i ou use [A-Za-z]+.
- ^ / $ multilinha. Sem o sinalizador m eles ancoram apenas no início/fim da string toda, não de cada linha. Ative m se estiver varrendo linhas de log.
Perguntas frequentes
Qual sabor de regex este testador usa?
Regex de JavaScript (ECMAScript), via o motor RegExp embutido do navegador. Isso difere do PCRE (PHP, Perl), do módulo re do Python e do POSIX em vários pontos: sem recursão, sem quantificadores possessivos, grupos nomeados usam (?<nome>...) em vez de (?P<nome>...), e atalhos de classes como \d são só ASCII a menos que você adicione o sinalizador u.
Ele suporta lookbehind?
Sim. Asserções de lookbehind como (?<=foo)bar e (?<!foo)bar foram adicionadas no ES2018 e funcionam em todos os Chromium, Firefox e Safari atuais. Se você precisa atingir navegadores muito antigos em produção, confira o caniuse antes de depender delas — mas o próprio testador roda sem problemas.
O que significam os sinalizadores g, i, m, s e u?
g acha todas as correspondências em vez de apenas a primeira. i torna a correspondência insensível a maiúsculas. m faz ^ e $ casarem o início e o fim de cada linha em vez da string toda. s (dotall) faz o . casar quebras de linha também. u habilita o suporte completo a Unicode e um parsing mais estrito de escapes. Escolha só o que precisar — em especial o g muda bastante quantas correspondências você obtém.
Por que meu quantificador guloso está casando demais?
Quantificadores como *, + e {n,} são gulosos por padrão — casam o máximo possível e só recuam se o resto do padrão falhar. Adicione ? para deixá-los preguiçosos: .*? casa o mínimo possível. Correção comum para <a>.*</a> devorando várias tags: use <a>.*?</a> ou a classe negada <a>[^<]*</a>.
Como referencio um grupo capturado depois no padrão ou na substituição?
Dentro do padrão, use \1, \2, etc. para casar o mesmo texto que um grupo anterior capturou — (\w+)\s+\1 casa palavras repetidas. Numa string de substituição (não suportada neste testador ao vivo, mas em String.replace) use $1, $2. Grupos nomeados usam \k<nome> dentro do padrão e $<nome> em substituições.
Por que minha regex quebra quando o padrão contém um ponto, barra ou parêntese?
Esses são metacaracteres de regex. Para casá-los literalmente, escape com barra invertida: \. para um ponto, \/ para uma barra (opcional em uma string new RegExp, obrigatório entre literais /.../), \( e \) para parênteses. Os caracteres especiais são . * + ? ^ $ { } ( ) | [ ] \ — qualquer um como texto literal precisa de escape.
Vocês salvam a regex ou o texto de teste que eu digito aqui?
Não. Não guardamos os padrões que você escreve nem o texto em que os testa. Tudo é descartado assim que você fecha ou atualiza a aba — sem logs, sem registro do nosso lado do que você casou. Para mais tranquilidade, as ferramentas de desenvolvedor do seu navegador confirmam.