UltKit

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.

Flags

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.

TokenSignificadoPadrãoTextoPrimeira correspondência
\dDígito de 0 a 9/\d+/Order 66 shipped66
\wLetra, dígito ou sublinhado (ASCII)/\w+/snake_case-idsnake_case
\sEspaç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-cabc
^ $Início e fim da entrada (ou da linha, com m)/^\w+$/singlesingle
[abc]Um dos caracteres listados/[aeiou]/rhythm and bluesa
[^abc]Qualquer caractere não listado/[^0-9]+/2026-10-18-
* + ?0 ou mais, 1 ou mais, 0 ou 1/colou?r/color colourcolor
{n,m}Entre n e m vezes/\d{2,4}/7 42 1999 12345642
(…)Grupo de captura/(\d+)px/width: 320px320px
(?<name>…)Grupo de captura nomeado/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)Grupo sem captura/(?:ab)+/ababab!ababab
a|bUm lado ou o outro/cat|dog/hotdogdog
\bLimite de palavra/\bcat\b/concat catcat
(?=…)Seguido de (lookahead)/\d+(?=%)/50 of 75%75
(?<!…)Não precedido de (lookbehind negativo)/(?<!\$)\b\d+/$30 or 4040
\p{L}Qualquer letra Unicode (exige u)/\p{L}+/unaï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.