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.
Padrão
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
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.
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.
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
Testador de regex
Regex Tester
Testa uma expressão regular contra um texto de exemplo com destaque ao vivo das ocorrências e lista dos grupos de captura.
Formatador e validador de JSON
JSON Formatter & Validator
Formata, minifica e valida JSON, apontando a linha e a coluna exatas de um erro de sintaxe.
Formatador e validador de YAML
YAML Formatter & Validator
Reindenta YAML de forma consistente, valida e aponta os erros de tabulação e âncora que quebram os parsers.
Formatador e validador de TOML
TOML Formatter & Validator
Formata e valida TOML, normalizando a ordem das tabelas e o estilo das tabelas em linha.
Em seguida
Estas aceitam o que esta ferramenta produz, então o resultado pode ir direto.
Localizar e substituir
Find & Replace
Substitui texto por valor literal, palavra inteira ou expressão regular, com grupos de captura e prévia de cada ocorrência.
Testador de regex
Regex Tester
Testa uma expressão regular contra um texto de exemplo com destaque ao vivo das ocorrências e lista dos grupos de captura.
Extrator de padrões
Pattern Extractor
Puxa cada e-mail, URL, número, data ou ocorrência de uma regex sua de um bloco de texto para uma lista.
Codificar e decodificar Base64
Base64 Encoder & Decoder
Codifica e decodifica Base64 e Base64URL para texto ou arquivos, tratando UTF-8 corretamente.
curl para código
curl to Code
Converte um comando curl em fetch, axios, Python requests, Go, PHP ou PowerShell.
Hash de texto
Text Hash
Calcula MD5, SHA-1, SHA-256, SHA-384, SHA-512 e CRC-32 de uma string, com opção de saída em maiúsculas e Base64.