Testador e Depurador de Regex
Testa expressões regulares de JavaScript ao vivo com realce de correspondências, grupos de captura e pré-visualização de substituição.
A carregar Testador e Depurador de Regex… Se nada acontecer, ativa o JavaScript.
As expressões regulares (regex ou regexp) são uma linguagem formal para descrever padrões em texto. A teoria remonta ao matemático Stephen Cole Kleene, que formalizou a álgebra das linguagens regulares em 1956, e a Ken Thompson, que implementou regex no editor QED e nas ferramentas originais do Unix grep, sed e awk nas décadas de 1960 e 1970. Os motores de regex modernos ampliam o fundamento teórico com funcionalidades práticas como as antevisões (lookaheads), as retrorreferências (backreferences) e os grupos de captura nomeados, o que faz delas uma das ferramentas de processamento de texto mais poderosas disponíveis em qualquer linguagem de programação.
Exemplos
\b\w+@\w+\.\w+\b on "a@b.com x@y.org"
2 matches: a@b.com, x@y.org
Os grupos de captura e as flags (g, i, m) são mostrados ao vivo à medida que escreves.
Perguntas frequentes
A minha entrada é enviada para um servidor?
Que variante de regex usa esta ferramenta?
Quando devo usar uma regex em vez de métodos de cadeia simples?
Em que difere a regex do JavaScript da PCRE (Python, PHP, Perl)?
Quais são as flags disponíveis e o que fazem?
Existe um limite para o comprimento da cadeia de teste ou do padrão?
Posso usar isto para testar um padrão de substituição?
O que é o retrocesso catastrófico e como o evito?
Qual é a diferença entre um grupo de captura e um sem captura?
Qual é um erro comum de principiante com as expressões regulares?
Sobre Testador e Depurador de Regex
As expressões regulares são indispensáveis para uma ampla variedade de tarefas do mundo real. A validação de formulários, verificar se um endereço de e-mail, um número de telefone ou um código postal correspondem ao formato esperado, usa quase universalmente regex. Os analisadores de logs extraem campos estruturados de linhas de log não estruturadas usando grupos de captura. Os editores de código e os IDE usam regex para procurar e substituir em grandes bases de código. As ferramentas de segurança usam regex para detetar padrões de injeção e fugas de dados sensíveis. Os pipelines de transformação de dados usam regex para normalizar formatos inconsistentes. As configurações de dispositivos de rede são auditadas com regex. Compreender e depurar um padrão de regex de forma interativa é muito mais rápido do que executar um script repetidamente.
Este testador avalia expressões regulares de JavaScript em relação à tua entrada em tempo real, realçando cada correspondência à medida que escreves. Lista todos os grupos de captura (numerados e nomeados) de cada correspondência para que possas ver de imediato o que cada grupo capturou. Um modo de substituição permite-te escrever um modelo de substituição e pré-visualizar o resultado de String.prototype.replace ou replaceAll, com suporte para as retrorreferências $1, $2 e $<name>. Tudo corre inteiramente no motor de JavaScript do teu navegador; os teus padrões e o teu texto de entrada nunca são enviados para qualquer servidor.
A regex é célebre por ser fácil de errar de forma subtil. Um ponto isolado (.) corresponde a qualquer carácter, incluindo as mudanças de linha em alguns modos, não apenas a um ponto literal. Os quantificadores gananciosos (*, +) correspondem ao máximo possível, capturando muitas vezes mais do que o pretendido; usa as versões preguiçosas (*?, +?) para corresponder ao mínimo possível. As âncoras ^ e $ correspondem ao início e ao fim de toda a cadeia por predefinição; acrescenta a flag multilinha (m) se quiseres que correspondam nos limites de linha. O retrocesso catastrófico, em que uma regex mal escrita provoca um tempo de correspondência exponencial com uma entrada adversária, é um risco real de negação de serviço em aplicações web que aplicam padrões fornecidos pelo utilizador a texto fornecido pelo utilizador.
Da teoria das linguagens formais ao grep
O conceito de expressões regulares tem origem na informática teórica. Em 1956, o matemático Stephen Cole Kleene publicou um artigo que descrevia os 'eventos regulares', conjuntos de cadeias que podiam ser descritos por um autómato finito, e introduziu a notação algébrica que viria a tornar-se a sintaxe de regex. O operador estrela (*), chamado a estrela de Kleene, tem o seu nome. Nessa altura, as expressões regulares eram puramente uma abstração matemática sem ligação à prática da computação.
O salto da teoria para a ferramenta chegou em 1968, quando Ken Thompson implementou a pesquisa com regex no editor de texto QED e depois na ferramenta do Unix grep (cujo nome vem de 'globally search a regular expression and print'). A inovação fundamental de Thompson foi um algoritmo eficiente que convertia uma expressão regular num autómato finito não determinista (NFA) e o simulava, garantindo uma correspondência em tempo linear sem retrocesso catastrófico. Muitos motores de regex modernos abandonaram a abordagem NFA de Thompson a favor de motores com retrocesso que suportam mais funcionalidades (como as retrorreferências) mas que podem apresentar um comportamento exponencial no pior dos casos.
Hoje, as expressões regulares são suportadas nativamente em praticamente todas as linguagens de programação e editores de texto. No entanto, a sintaxe fragmentou-se em dezenas de variantes incompatíveis, POSIX BRE, POSIX ERE, PCRE, .NET, Java, Python, JavaScript, Ruby, cada uma com subtis diferenças na sintaxe e na semântica. Uma regex escrita para uma linguagem funcionará muitas vezes noutra, mas os casos-limite abundam. Esta fragmentação é a razão pela qual se recomenda sempre testar um padrão no motor concreto que vais realmente usar antes de o implementar em produção.