Ferramentas

Testador de expressões regulares

Dev

Teste expressões regulares JavaScript com destaque de correspondências e grupos de captura.

100% no cliente Sem backend
Saída
    Nesta página

    O que é um testador de expressões regulares?#

    Uma expressão regular é uma notação compacta para descrever padrões em texto: “tudo o que pareça um e-mail”, “a terceira palavra de cada linha”, “todos os números que não estejam entre aspas”. Escrever o padrão é só metade do trabalho — a outra metade é ver o que ele realmente corresponde, sobre texto que se pareça com o seu, antes de o colar em código de produção. Um testador de regex é a página onde se faz isso.

    Esta ferramenta corre o seu padrão contra o seu texto de amostra em tempo real, realça cada correspondência no sítio e lista cada grupo de captura separadamente, para que confirme não só que correspondeu, mas o que capturou. Usa o motor de regex do JavaScript (o mesmo que o seu navegador e o Node já falam), pelo que o comportamento aqui corresponde ao que o seu código vai fazer.

    Como usar#

    1. Introduza o Padrão entre os dois marcadores / no topo à esquerda. Não escreve as barras — são desenhadas por si, da mesma forma que se escreve um literal de regex em código.
    2. Introduza as Flags na pequena caixa à direita do padrão. As que vai usar mais:
      • g — procurar todas as correspondências, não só a primeira.
      • i — sem distinção de maiúsculas.
      • m^ e $ correspondem ao início e fim de cada linha, não só a toda a string.
      • s — deixar . corresponder também a quebras de linha.
      • u — tratar o padrão como Unicode (importa para emoji e não-ASCII).
    3. Cole o seu Texto de teste na caixa por baixo. Use texto que realmente se pareça com a sua entrada real — um padrão que funciona em exemplos limpos muitas vezes comporta-se mal em dados mais sujos.
    4. Leia a pré-visualização realçada à direita: cada correspondência é mostrada no sítio, em contexto. Por baixo, cada grupo de captura é listado com o seu índice, o texto capturado e o desvio onde foi encontrado.

    Principais recursos#

    • Realce em tempo real. Cada correspondência é renderizada no sítio sobre o texto original, para que se vejam as fronteiras num relance — incluindo o caso incómodo em que uma correspondência atravessa um espaço.
    • Lista de capturas por grupo. Índice de grupo, substring correspondida e desvio de carateres, uma linha por captura. Essencial quando um padrão tem três ou quatro grupos e precisa de saber qual é qual.
    • Várias flags ao mesmo tempo. Combine g, i, m, s, u livremente (por exemplo giu para global, sem maiúsculas, com consciência Unicode).
    • Alerta de ReDoS. Alguns padrões — tipicamente quantificadores aninhados como (a+)+ — podem explodir exponencialmente com entrada manipulada. A linha de estado sinaliza o próprio padrão no momento em que corresponde, convidando-o a simplificá-lo antes de se encontrar com entrada hostil. A verificação lê a forma do seu padrão; não mede quanto tempo a última execução demorou, e um padrão verdadeiramente catastrófico ainda pode bloquear o separador — pelo que faça caso ao aviso.
    • Limitado por desenho. A entrada é limitada a 250 000 carateres e a lista de correspondências para de crescer além de alguns milhares de entradas (o painel de captura mostra as primeiras 200), pelo que uma colagem acidental de um arquivo enorme não pode correr silenciosamente para sempre.
    • Sem ida e volta. Padrão e texto são processados no seu navegador; nada é enviado para lado nenhum.

    Exemplo detalhado#

    Suponha que tem uma lista de linhas de registro e quer extrair o método e o caminho das linhas que começam por um verbo HTTP. Use este padrão:

    (\w+)\s+(/[\w/-]+)

    com as flags gm, e teste contra:

    GET /api/users
    POST /api/login
    DELETE /api/users/42
    not a log line
    PUT /api/items/3-qty

    A ferramenta realça a primeira, a segunda, a terceira e a quinta linhas (a quarta não começa por uma palavra seguida de um caminho). A lista de captura reporta, para cada correspondência, o método e o caminho separadamente — pelo que DELETE é o grupo 1 e /api/users/42 é o grupo 2, e pode confirmar que o grupo do caminho inclui corretamente o segmento final -qty na última linha.

    Perguntas frequentes#

    Que variante de regex é que esta usa?#

    O motor embutido do JavaScript — o mesmo usado por String.prototype.match, RegExp.prototype.exec e os literais de regex do Node. Um padrão que funcione aqui funcionará inalterado no seu código frontend ou no seu servidor Node. Não é PCRE, RE2 ou o regex do Rust; se copiar um padrão de código em PHP ou Go, teste-o aqui antes de confiar.

    A ferramenta avisa de um possível ReDoS. O que significa?#

    Certos padrões podem ser feitos para correr durante muito tempo sobre entrada hostil — o exemplo clássico é (a+)+b aplicado a uma string de a sem um b final. Atacantes exploram isto para negação de serviço em serviços baseados em regex. O aviso é uma leitura estática da forma do seu padrão (quantificadores aninhados, alternância sobreposta); dispara no momento em que tal padrão produz uma correspondência, não com base em quanto tempo a última execução demorou. Se o vir, simplifique o padrão: remova quantificadores aninhados, ancore-o, ou use grupos atômicos se o motor de destino os suporta.

    Porque é que o meu padrão só corresponde uma vez?#

    Provavelmente falta-lhe a flag g. Sem g, um regex de JavaScript para na primeira correspondência. Adicione g para encontrar todas as ocorrências não sobrepostas.

    O . corresponde a quebras de linha?#

    Não por padrão — . corresponde a qualquer caráter exceto um terminador de linha. Adicione a flag s (por vezes chamada “dotall”) se quer que . abranja quebras de linha, útil ao corresponder blocos que incluem quebras.