Testador de regex online (JavaScript)

O testador de regex aplica uma expressão regular a um texto e destaca cada trecho que casa, com a posição e o conteúdo de cada grupo de captura. Ele usa o motor de expressões regulares do JavaScript, o mesmo do seu navegador e do Node.js, e roda localmente, sem enviar o texto a nenhum servidor.

Atualizado em · Por Leonardo Gaertner

Destaque

Casamentos

    Achou um resultado errado ou tem uma sugestão? Avise por e-mail.

    Como usar

    1. Digite a expressão no campo entre as barras, sem as barras.
    2. Marque as flags que precisar, como g para achar todos os casamentos e i para ignorar maiúsculas.
    3. Cole o texto de teste e veja o destaque e a lista de casamentos com seus grupos.

    Como funciona

    A ferramenta cria a expressão com o construtor RegExp do JavaScript e percorre o texto coletando cada casamento, com a posição inicial e os grupos de captura, inclusive os nomeados, escritos como (?<nome>...).

    As flags mudam o comportamento: g procura todos os casamentos (sem ela, só o primeiro), i ignora maiúsculas e minúsculas, m faz ^ e $ valerem em cada linha, s faz o ponto pegar também quebras de linha e u ativa o modo Unicode.

    A sintaxe é a do JavaScript. Ela é parecida com a de Python, PHP e Java, mas não idêntica: por exemplo, JavaScript não tem grupos atômicos nem quantificadores possessivos. Teste na linguagem em que a expressão vai rodar quando o comportamento for crítico.

    Expressões que mais se usam

    \d+ um ou mais dígitos

    \d{3}\.\d{3}\.\d{3}-\d{2} um CPF com pontuação

    ^[\w.+-]+@[\w-]+\.[\w.-]+$ um e-mail simples

    (?<ano>\d{4})-(?<mes>\d{2}) ano e mês, com grupos nomeados

    Fonte: MDN: expressões regulares em JavaScript

    Em código

    Expressões prontas para CEP, telefone com DDD e e-mail. Em Python e PHP, o cifrão aceita uma quebra de linha no fim: por isso os exemplos usam fullmatch e o modificador D.

    JavaScript
    // CEP: 5 dígitos, hífen opcional e 3 dígitos
    const reCEP = /^\d{5}-?\d{3}$/;
    // Telefone com DDD: celular (9 + 8 dígitos) ou fixo (começa de 2 a 5)
    const reTelefone = /^\(?[1-9]{2}\)? ?(?:9\d{4}|[2-5]\d{3})-?\d{4}$/;
    // E-mail: só confere o formato geral. A prova real é enviar um e-mail de confirmação.
    const reEmail = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
    
    const cepValido = (v) => reCEP.test(v);
    const telefoneValido = (v) => reTelefone.test(v);
    const emailValido = (v) => reEmail.test(v);
    Python
    import re
    
    # re.ASCII: sem ele, \d também aceita dígitos de outros alfabetos, como ٣
    RE_CEP = re.compile(r"\d{5}-?\d{3}", re.ASCII)
    RE_TELEFONE = re.compile(r"\(?[1-9]{2}\)? ?(?:9\d{4}|[2-5]\d{3})-?\d{4}", re.ASCII)
    RE_EMAIL = re.compile(r"[^\s@]+@[^\s@]+\.[^\s@]+")
    
    
    # fullmatch exige que o texto inteiro combine (o $ aceitaria uma quebra de linha no fim)
    def cep_valido(v: str) -> bool:
        return RE_CEP.fullmatch(v) is not None
    
    
    def telefone_valido(v: str) -> bool:
        return RE_TELEFONE.fullmatch(v) is not None
    
    
    def email_valido(v: str) -> bool:
        return RE_EMAIL.fullmatch(v) is not None
    PHP
    <?php
    // O modificador D faz o $ recusar uma quebra de linha no fim do texto
    const RE_CEP = '/^\d{5}-?\d{3}$/D';
    const RE_TELEFONE = '/^\(?[1-9]{2}\)? ?(?:9\d{4}|[2-5]\d{3})-?\d{4}$/D';
    const RE_EMAIL = '/^[^\s@]+@[^\s@]+\.[^\s@]+$/D';
    
    function cepValido(string $v): bool
    {
        return preg_match(RE_CEP, $v) === 1;
    }
    
    function telefoneValido(string $v): bool
    {
        return preg_match(RE_TELEFONE, $v) === 1;
    }
    
    function emailValido(string $v): bool
    {
        return preg_match(RE_EMAIL, $v) === 1;
    }

    Perguntas frequentes

    Por que a regex só encontra o primeiro resultado?

    Porque falta a flag g (global). Sem ela, o JavaScript para no primeiro casamento. Marque a opção g para listar todos.

    A regex funciona igual em Python, PHP ou Java?

    A base é a mesma, mas há diferenças. Os grupos nomeados, por exemplo, são escritos como (?<nome>...) em JavaScript e (?P<nome>...) em Python. Para expressões complexas, confirme na linguagem de destino.

    Preciso escapar a barra invertida no meu código?

    Em uma string de código, sim: \d vira "\\d" em JavaScript, Java e outras linguagens. Já em um literal /\d/ de JavaScript e neste testador, você escreve só \d.

    Por que a aba trava com algumas expressões?

    Expressões com repetições aninhadas, como (a+)+, podem exigir um número enorme de tentativas em certos textos, o chamado backtracking catastrófico. Simplifique o padrão ou reduza o texto de teste.