Testador de regex
Digite um padrão, marque as flags de que precisa e cole um texto: cada correspondência é destacada enquanto você digita e listada com a posição e os grupos de captura. O padrão roda no próprio motor de regex JavaScript do seu navegador, então os resultados batem com o seu código e o texto fica no seu dispositivo.
0 caracteres · 0 palavras · 0 linhas
As correspondências aparecem destacadas aqui.0 caracteres · 0 palavras · 0 linhas
Funciona inteiramente nesta aba do navegador. Seu texto nunca é enviado nem armazenado.
Tokens de regex do JavaScript
A coluna de primeira correspondência foi gerada executando cada padrão sobre o seu texto com o motor JavaScript que gerou esta página.
| Token | Significado | Padrão | Texto | Primeira correspondência |
|---|---|---|---|---|
\d | Dígito de 0 a 9 | /\d+/ | Order 66 shipped | 66 |
\w | Letra, dígito ou sublinhado (ASCII) | /\w+/ | snake_case-id | snake_case |
\s | Espaço em branco, incluindo tabulações e quebras de linha | /\s+/ | two spaces | |
. | Qualquer caractere exceto quebra de linha (a menos que use s) | /a.c/ | abc a-c | abc |
^ $ | Início e fim da entrada (ou da linha, com m) | /^\w+$/ | single | single |
[abc] | Um dos caracteres listados | /[aeiou]/ | rhythm and blues | a |
[^abc] | Qualquer caractere não listado | /[^0-9]+/ | 2026-10-18 | - |
* + ? | 0 ou mais, 1 ou mais, 0 ou 1 | /colou?r/ | color colour | color |
{n,m} | Entre n e m vezes | /\d{2,4}/ | 7 42 1999 123456 | 42 |
(…) | Grupo de captura | /(\d+)px/ | width: 320px | 320px |
(?<name>…) | Grupo de captura nomeado | /(?<h>\d\d):(?<m>\d\d)/ | at 09:45 | 09:45 |
(?:…) | Grupo sem captura | /(?:ab)+/ | ababab! | ababab |
a|b | Um lado ou o outro | /cat|dog/ | hotdog | dog |
\b | Limite de palavra | /\bcat\b/ | concat cat | cat |
(?=…) | Seguido de (lookahead) | /\d+(?=%)/ | 50 of 75% | 75 |
(?<!…) | Não precedido de (lookbehind negativo) | /(?<!\$)\b\d+/ | $30 or 40 | 40 |
\p{L} | Qualquer letra Unicode (exige u) | /\p{L}+/u | naïve 東京 | naïve |
As seis flags e o que cada uma muda
g (global) encontra todas as correspondências em vez de parar na primeira; sem ele, a lista tem uma única entrada. i ignora maiúsculas e minúsculas. m (multilinha) faz ^ e $ corresponderem ao início e ao fim de cada linha, e não apenas do texto inteiro, o que é o que você quer para um padrão como espaços no fim da linha. s (dotAll, adicionado no ES2018) faz o . corresponder também a quebras de linha. u (unicode) trata o texto como pontos de código, então um emoji conta como um único caractere, e habilita escapes de propriedade como \p{L} para qualquer letra de qualquer alfabeto. y (sticky) só corresponde exatamente na posição atual, o modo usado por tokenizadores. O JavaScript também tem d, para índices das correspondências, e v, para operações de conjuntos em classes; este testador usa apenas as seis flags acima.
Abaixo do texto de teste, cada correspondência mostra seu índice e seus grupos. Os grupos numerados vêm de parênteses simples, (?:…) agrupa sem capturar, e (?<year>\d{4}) cria um grupo nomeado que aparece pelo nome, como mostra o exemplo de data ISO. O menu Padrões comuns insere pontos de partida testados para endereços de e-mail, URLs, endereços IPv4, cores hexadecimais, UUIDs, palavras repetidas e espaços no fim da linha. Use o padrão de e-mail como uma verificação básica, não como validação: a gramática completa de um endereço é muito mais permissiva, e o único teste real é enviar uma mensagem.
Lookbehind e backtracking catastrófico
Os lookarounds testam o que está ao redor de uma posição sem consumir caracteres. O lookahead, (?=…) e (?!…), sempre fez parte do JavaScript; o lookbehind, (?<=…) e (?<!…), chegou no ES2018 e passou a funcionar em todos os principais navegadores quando o Safari 16.4 o incluiu em 2023. Assim, (?<=\$)\d+ encontra 42 em "$42" sem incluir o cifrão. Ao contrário de muitos outros motores, o JavaScript permite lookbehind de qualquer tamanho.
O motor do JavaScript usa backtracking: quando um caminho falha, ele volta e tenta as alternativas. Quantificadores aninhados, como (a+)+$, dão a ele um número exponencial de maneiras de dividir o mesmo texto, então uma sequência de 30 letras a seguida de um x pode levar segundos, e mais algumas letras podem levar horas. Isso é o backtracking catastrófico, e em servidores vira ReDoS, um ataque de negação de serviço; uma única regra de WAF com essa falha derrubou a rede da Cloudflare por cerca de meia hora em 2 de julho de 2019. Como este testador roda na sua aba, um padrão assim pode travar a página; recarregue e reescreva o padrão para que dois quantificadores nunca possam disputar os mesmos caracteres, usando classes mais restritas como [^,]* em vez de .*, ou âncoras. Para editar o texto em si, em vez de procurar correspondências, veja as ferramentas de texto; mais utilitários para desenvolvedores estão no hub de ferramentas para desenvolvedores.
Perguntas frequentes
- Por que minha regex encontra só uma correspondência?
- A flag g está desativada. Sem ela, o motor para depois da primeira correspondência. Marque g para listar todas as ocorrências; a flag y sozinha também encontra várias, mas só quando elas vêm uma logo após a outra.
- O \d reconhece dígitos de outros sistemas de escrita em JavaScript?
- Não. No JavaScript, \d corresponde apenas a 0 a 9 e \w apenas a letras ASCII, dígitos e sublinhado, mesmo com a flag u. Use \p{Nd} ou \p{L} com u para outros alfabetos.
- Um padrão testado aqui funciona igual em Python ou PHP?
- A sintaxe básica se mantém, mas os detalhes mudam: os grupos nomeados do Python são escritos
(?P<name>…), PHP e Python aceitam quantificadores possessivos que o JavaScript não tem, e as regras de lookbehind variam. Teste de novo no motor de destino. - Como encontrar um ponto ou um colchete literal?
- Coloque uma barra invertida antes:
\.corresponde a um ponto e\[a um colchete de abertura. Dentro de uma classe de caracteres, a maioria dos símbolos já é literal, então[.]também corresponde apenas a um ponto. - Por que a página travou enquanto eu digitava um padrão?
- O padrão provavelmente causou backtracking catastrófico no seu texto. Recarregue a página, evite quantificadores aninhados como
(.*)*ou(a+)+e faça cada parte corresponder ao mínimo possível.