Pular para o conteúdo

Explicador de regex

Regex Explainer

Decompõe uma expressão regular numa árvore rotulada para você ler o que cada parte realmente casa.

Decompõe uma expressão regular em uma árvore e diz o que cada peça faz — cada grupo, quantificador, classe e asserção, aninhados do jeito que o padrão está. É a mesma tela do testador, aberta na aba de explicação, porque ler um padrão e executá-lo são a mesma atividade.

🔒 Roda inteiramente no seu navegadorregexexplainlearn
Visão

Padrão

//g

pode casar em qualquer ponto da string, 2 grupos de captura.

O que cada parte faz

([\w.+-]+)@([\w-]+\.[\w.-]+)Em ordem

Cada uma destas coisas tem que casar, uma depois da outra, sem nada no meio.

([\w.+-]+)Grupo de captura 1

Casa com o padrão de dentro e guarda o texto, disponível como `match[1]` e como `$1` numa substituição.

[\w.+-]+Repetido +

Repete uma ou mais vezes, o máximo possível, e só cede quando o resto falha.

[\w.+-]Um caractere qualquer deste conjunto

Casa com exatamente um caractere, o primeiro dos seguintes que aparecer na entrada.

Dentro de uma classe, `.` é um ponto final. Aqui ele não quer dizer “qualquer caractere”, e escapá-lo não muda nada.

\wQualquer caractere de palavra

Exatamente `[A-Za-z0-9_]`.

Isto é só ASCII. Para uma expressão regular do JavaScript, `é`, `한` e `ß` não são caracteres de palavra, então `\w+` não casa com uma palavra coreana nem acentuada.

.O caractere “.” (U+002E)

É comparado exatamente, maiúsculas e minúsculas incluídas.

+O caractere “+” (U+002B)

É comparado exatamente, maiúsculas e minúsculas incluídas.

-O caractere “-” (U+002D)

É comparado exatamente, maiúsculas e minúsculas incluídas.

@O caractere “@” (U+0040)

É comparado exatamente, maiúsculas e minúsculas incluídas.

([\w-]+\.[\w.-]+)Grupo de captura 2

Casa com o padrão de dentro e guarda o texto, disponível como `match[2]` e como `$2` numa substituição.

[\w-]+\.[\w.-]+Em ordem

Cada uma destas coisas tem que casar, uma depois da outra, sem nada no meio.

[\w-]+Repetido +

Repete uma ou mais vezes, o máximo possível, e só cede quando o resto falha.

[\w-]Um caractere qualquer deste conjunto

Casa com exatamente um caractere, o primeiro dos seguintes que aparecer na entrada.

\wQualquer caractere de palavra

Exatamente `[A-Za-z0-9_]`.

Isto é só ASCII. Para uma expressão regular do JavaScript, `é`, `한` e `ß` não são caracteres de palavra, então `\w+` não casa com uma palavra coreana nem acentuada.

-O caractere “-” (U+002D)

É comparado exatamente, maiúsculas e minúsculas incluídas.

\.O caractere “.” (U+002E)

É comparado exatamente, maiúsculas e minúsculas incluídas.

A barra invertida sobra aqui: nesta posição, este caractere não tem nenhum significado especial.

[\w.-]+Repetido +

Repete uma ou mais vezes, o máximo possível, e só cede quando o resto falha.

[\w.-]Um caractere qualquer deste conjunto

Casa com exatamente um caractere, o primeiro dos seguintes que aparecer na entrada.

Dentro de uma classe, `.` é um ponto final. Aqui ele não quer dizer “qualquer caractere”, e escapá-lo não muda nada.

\wQualquer caractere de palavra

Exatamente `[A-Za-z0-9_]`.

Isto é só ASCII. Para uma expressão regular do JavaScript, `é`, `한` e `ß` não são caracteres de palavra, então `\w+` não casa com uma palavra coreana nem acentuada.

.O caractere “.” (U+002E)

É comparado exatamente, maiúsculas e minúsculas incluídas.

-O caractere “-” (U+002D)

É comparado exatamente, maiúsculas e minúsculas incluídas.

Flags

g — global
Encontra todas as ocorrências em vez de parar na primeira. Em troca, `.test()` e `.exec()` vão movendo o `lastIndex` entre as chamadas, que é a origem mais comum do “uma chamada sim, outra não”.

Como usar

  1. Cole o padrão que você herdou

    Aquele do arquivo de configuração que ninguém lembra de ter escrito. Ele é analisado em vez de reconhecido por padrões, então a decomposição segue a estrutura real.

  2. Leia a árvore de cima a baixo

    Cada nó mostra o fragmento de origem, o que ele é e o que faz. As notas apontam as partes que costumam surpreender: um quantificador aninhado, um grupo que captura quando não precisava.

  3. Mude para Testar para conferir sua leitura

    O padrão vai junto. Entender uma regex e confirmar que ela faz o que você acha são dois passos diferentes, e o segundo é o barato.

Perguntas frequentes

O que significa o aviso em um quantificador aninhado?

Algo como `(a+)+` dá ao motor um número exponencial de jeitos de dividir o mesmo texto, então uma entrada que não casa pode levar mais tempo do que a idade do universo. É a forma por trás da maioria das negações de serviço por expressão regular.

Por que ele me diz que um grupo é de captura?

Porque um grupo de captura que você não usa custa um slot e desloca a numeração dos que você usa. `(?:…)` agrupa sem capturar, o que mantém `$1` apontando para o que você queria.

Ele explica as flags também?

Sim, em um painel próprio: cada flag que você ligou, seu nome e o que ela muda. `m` e `s` em particular valem a leitura, porque os nomes sugerem o comportamento uma da outra.

Pode receber de

Em seguida

Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.