Command Palette

Search for a command to run...

Regex Tester: depurar expressões regulares em texto real

Regex Tester: depurar expressões regulares em texto real

T
Toolz Team
|Jul 14, 2026|17 min ler

Parte da coleção regex

Perdi a maior parte de uma tarde uma vez para um único quantificador ganancioso Eu estava escrevendo um mapa de redirecionamento para uma migração do WordPress - algumas centenas de URLs antigos que precisavam ser reescritos para novos slugs - e EU tinha um regex que era suposto Para capturar a lesma de cada caminho. Funcionou nos três URLs que testei na minha cabeça. Não funcionou no quarto, que tinha dois segmentos de caminho, porque .* Tinha engolido alegremente a primeira barra e tudo depois. A regra redirecionava silenciosamente metade do site para o lugar errado, e descobri por um leitor, não por causa dos meus testes, porque meu "teste" estava olhando para o padrão e confiando nele.

Esse é o problema central com expressões regulares: elas são somente gravação até que você execute-as em algo. Um padrão parece plausível até o momento em que a entrada real prova que está errado e os modos de falha são silenciosos. Um regex que não corresponde a nada gera nenhum erro. Um regex que corresponde demais não gera nenhum erro. Um regex com um grupo de captura sutilmente errado entrega a substring errada e segue em frente. A única maneira de saber que um padrão faz o que você pensa é alimentá-lo com o texto confuso e carregado de maiúsculas e minúsculas que ele realmente verá e olhar no que pega.

um testador regex fecha essa lacuna Você coloca seu padrão em uma caixa, seu texto de amostra em outra, e cada partida acende no lugar - com os grupos de captura quebrados para que você possa ver exatamente qual fatia da string pousou no grupo 1 versus grupo 2. O que EU construí para Toolz.dev é executado no navegador & #39; s nativo RegExp Engine, o mesmo que seu código JavaScript e TypeScript usa, então o que você vê no testador é o que você obtém em produção. Nenhuma aproximação, não "perto o suficiente".

Este guia aborda como usar o testador para depurar os padrões rapidamente, o que cada sinalizador realmente faz, como os grupos de captura e os grupos nomeados aparecem na saída e as pegadas específicas do JavaScript que viajam por pessoas de Python ou PCRE.

tl;dr: Cole seu padrão no Tester regex Toolz.dev (nenhum barra é necessária), alterne os sinalizadores G/I/M/S/U/Y e deixe seu texto de teste abaixo. Os resultados dos resultados destacam a live com cores alternadas, todos os grupos de captura numerados e nomeados são listados por correspondência e os erros de sintaxe mostram a mensagem exata do mecanismo. Ele usa o mecanismo regexp real JavaScript, executa 100% do lado do cliente para que os logs sensíveis nunca sejam carregados e pares com o Construtor Regex Para montar padrões do zero.


Como você testa um regex sem executar todo o programa?

A maneira lenta de depurar um regex é o loop com o qual a maioria de nós começa: edite o padrão em seu código, execute o programa, leia a saída, adivinhe o que deu errado, repita Toda iteração custa uma execução completa do programa e o feedback é indireto - você vê o conseqüência da partida, não da partida em si.

Um testador recolhe esse loop para nada. Você cola o padrão, colar texto representativo e ver as correspondências imediatamente. Quando você altera um caractere no padrão, as luzes são atualizadas. Isso aperta o feedback até o ponto em que você pode explorar- tente um + onde você teve um *, adicione um limite de palavra, faça um grupo não capturar - e observe o efeito pousar em tempo real em vez de imaginá-lo.

A disciplina-chave é usar verdadeiro teste o texto, não o exemplo limpo em sua cabeça O URL que quebrou meu mapa de redirecionamento tinha dois segmentos de caminho; meu caso de teste mental tinha um Se EU tivesse colado a lista real de URLs antigos em um testador, a correspondência gananciosa teria sido visivelmente errada na linha quatro Pegue as linhas de log reais, as entradas reais do usuário, os caminhos reais do arquivo - incluindo os feios - e deixe o testador mostrar onde o padrão se desfaz antes que seus usuários o façam.

O que as bandeiras regex realmente mudam?

As bandeiras modificam a forma como todo o padrão é aplicado, e não as interpretar mal está por trás de uma grande parte dos momentos "por que isso não funciona". o testador Expõe todos os seis sinalizadores JavaScript como alterna para que você possa virar uma e assistir a mudança de resultado.

g - global. Sem ele, a correspondência pára no primeiro golpe. Com ele, o mecanismo encontra todas as correspondências no texto. No testador, Global está ativado por padrão porque você quase sempre deseja ver todas as partidas; desativa-a para confirmar como uma única chamada é chamada String.match sem g voltaria.

eu ignoro o caso. Torna todo o padrão que não faz distinção entre maiúsculas e minúsculas error fósfor Error e ERROR. Simples, e a bandeira mais usada depois de G.

m - multilinha. Este é amplamente incompreendido. isso faz não produzir . quebras de linha cruzada. muda o que ^ e $ Âncora: com m, eles correspondem no início e no final de cada desfila, não apenas o início e o fim de toda a string. Se você estiver combinando linha por linha em um log, desejará isso.

s - dotTodos. Esta é a bandeira que faz . Combine os personagens de nova linha. sem ele, . Corresponde a qualquer personagem exceto Uma quebra de linha, e é por isso que um padrão que se engloba em várias linhas geralmente para silenciosamente na primeira. Se sua partida cruzar os limites da linha, s é o que você precisa - não m.

você - unicode. Ativa o modo Unicode completo, o que faz com que \u{...} Escapes funcionam, trata os pares substitutos como pontos de código únicos e faz classes de personagens como \p{Letter} disponível. Importante quando seu texto possui scripts emoji ou não latinos.

y - pegajoso. Ancora cada tentativa de jogo na posição exata de lastIndex, portanto, a correspondência só terá sucesso se começar precisamente lá. É um sinalizador de nicho usado em tokenizadores e analisadores; a maioria dos trabalhos diários nunca o toca.

A confusão que custa mais tempo é m contra s. As pessoas buscam multilinhas quando significam o Dotall. Se o seu ponto não estiver cruzando as linhas, você precisa s. Se suas âncoras não atingirem os limites da linha, você precisa m. Eles resolvem problemas diferentes e são frequentemente usados juntos.

Como os grupos de captura são mostrados na saída?

Parênteses em um padrão fazem dois trabalhos: eles agrupam subpadrões para quantificadores ou alternância, e eles captura a fatia correspondente para extração. Quando você & #39; estiver usando um regex para retirar dados do texto - uma data & #39; s ano e mês, uma linha de log & #39; s carimbo de data e hora e nível - os grupos de captura são o ponto inteiro, e errá-los é a fonte mais comum de & quot; o padrão corresponde, mas eu entendi a string errada. & quot;

o testador Lista cada partida com seus grupos de captura divididos abaixo dela. O grupo 1 é o primeiro subpadrão parêntese, o grupo 2 o segundo, e assim por diante, cada um mostrado com o texto exato que foi capturado para essa correspondência. Isso torna os bugs do grupo de limites óbvios: se o Grupo 1 for mais do que o esperado, você poderá ver e puxar o parêntese.

Grupos nomeados recebem o mesmo tratamento. quando você escreve (?<year>\d{4})-(?<month>\d{2}), o testador mostra as capturas pelo nome - <year> e <month>- juntamente com seus equivalentes numerados, para que você possa confirmar o mapa de nomes nas fatias que pretende antes de confiar match.groups.year em código. Grupos nomeados tornam os padrões autodocumentados e o código mais legível, e vê-los resolvê-los corretamente no testador é a maneira mais rápida de confiar neles.

Uma armadilha relacionada As superfícies do testador: um grupo que participa do padrão, mas não corresponde em uma determinada tentativa, mostra como "nenhuma correspondência" em vez de uma string vazia. Essa distinção é importante, porque em JavaScript, tal grupo é undefined, e o código que assume que é sempre uma string será lançada. Vê-lo sinalizado no testador informa para você guardar esse acesso.

Qual sabor de regex é esse e por que isso importa?

Expressões regulares não são uma língua. O padrão que funciona em Python re módulo pode se comportar de forma diferente - ou jogar - em JavaScript, e vice-versa. Este testador usa o JavaScript (ECMAScript) motor incorporado em seu navegador, que é byte-para-byte o mesmo motor Node.js executa Então, se você & #39;re escrevendo JavaScript, TypeScript, ou código Node, os resultados aqui são exatamente o que seu código vai fazer.

Essa precisão corta nos dois sentidos. Se você copiar um padrão de uma resposta de overflow de pilha escrita para PCRE (PHP e o preg_ funções que uso constantemente no trabalho do WordPress) ou para Python, algumas funcionalidades won&#39; t translate. O JavaScript historicamente carecia de asserções lookbehind, ganhou-as relativamente recentemente e ainda lida com algumas fugas de propriedades Unicode de forma diferente Possessivos quantificadores e grupos atômicos do PCRE don&#39; não existe em JavaScript de todo Recursion - um recurso PCRE para combinar estruturas aninhadas - não tem equivalente JavaScript.

O resultado prático: teste o sabor em que você vai implantar. Um testador que implementa fielmente um mecanismo é mais útil do que um que implementa uma média fuzzy de todos eles, porque "Ele funcionou no testador" precisa significar "Ele funcionará no meu código". é A fonte da verdade. O kit de ferramentas mais amplo para esse tipo de verificação de linguagem é abordado no Guia de ferramentas de codificação.

Quais são os usos diários de um testador regex?

Construindo e depurando padrões de validação

Campos de e-mail, números de telefone, códigos postais, slugs, strings de versão semântica - cada formulário valida algo, e a validação geralmente é um regex O testador permite que você jogue os casos estranhos em seu padrão antes de enviar: o e-mail com uma tag de endereço positivo, o número de telefone com uma extensão, a string de versão como 1.10.0 que um padrão ingênuo trunca. Cole uma coluna de valores reais e observe quais falhas na correspondência.

Extraindo dados de logs

Logs de servidor, logs de aplicativos e exportações de CSV são texto semiestruturado, e regex é como você puxa campos para fora deles Os grupos de captura pegam o carimbo de data/hora, o nível, o ID da solicitação A divisão do grupo por partida tester&#39; s é exatamente a visualização que você precisa aqui - cole uma dúzia de linhas de log reais e confirme cada campo pousa no grupo certo em todos eles, não apenas na primeira linha arrumada Isso se encaixa com o Fluxo de trabalho de depuração de API Onde os corpos de resposta e os cabeçalhos são raspados para valores específicos.

Pesquisar e substituir em uma base de código

Editores e IDEs oferecem suporte a Regex em Find-and-splace, e um padrão ruim pode reescrever muito mais do que o pretendido. testando o partida lado em um testador dedicado antes de executar a substituição é seguro barato - veja exatamente o que o padrão seleciona em uma amostra representativa, em seguida, executar a substituição com confiança Meu desastre redirecionamento-mapa foi fundamentalmente um encontrar-e-substituir que EU nunca testado contra entrada real primeiro.

Aprendendo e ensinando Regex

O destaque ao vivo torna o testador uma ferramenta de aprendizado genuína. Crie um padrão de cada vez e observe o conjunto de jogos encolher e crescer à medida que você adiciona âncoras, quantificadores e classes. visto \d+ Pegue um número inteiro e depois \d Grab um único dígito faz mais para entender do que qualquer explicação em prosa. Quando você estiver pronto para montar um padrão de componentes em vez de depurar um existente, o Construtor Regex é a ferramenta complementar.

Como você evita a armadilha de jogo de comprimento zero?

Um padrão que pode corresponder a uma string vazia - a*, \d*, (foo)?- o & quot; pode combinar & quot; em todas as posições entre caracteres, produzindo uma enxurrada de correspondências vazias Código de correspondência ingênuo que não & #39; t avança além de loops de correspondência de comprimento zero para sempre O testador Protege contra isso internamente avançando sempre, para que nunca fique pendurado, mas ato de mostrar você os fósforos vazios.

Essa tela é uma característica, não ruído. Uma pilha de fósforos vazios é o testador informando que seu quantificador é muito permissivo. Se você quis dizer "um ou mais dígitos", escreveu \d* Quando você quis \d+. Se um grupo for necessário, você o marcou opcional com ?. Ver as partidas vazias é o diagnóstico que o aponta para a correção. Quando seu padrão está certo, as correspondências são as substrings com as quais você se importa e nada mais.

JavaScript Regex vs Outros Sabores: Uma Comparação Rápida

característica Javascript (este testador) PCRE (PHP) píton re
Grupos nomeados (?<name>...) (?<name>...) ou (?P<name>...) (?P<name>...)
olhar por trás Suportado (motores modernos) suportado suportado
Grupos atômicos / possessivo não suportado suportado limitado
recursão não suportado suportado não suportado
ponto corresponde à bandeira de nova linha s (dotal) s (dotal) re.DOTALL
Propriedade Unicode \p{...} requer u pavilhão requer u modificador regex Somente módulo
correspondência pegajosa y pavilhão \G âncora \G-como via match posição

A lição da mesa é que "regex" é uma família, não um padrão. A sintaxe se sobrepõe o suficiente para acalmá-lo a copiar padrões em idiomas, e as diferenças são exatamente os recursos avançados que você busca em problemas difíceis. Teste em seu sabor alvo. Para JavaScript e Node, esse é o testador; o Kit de ferramentas para desenvolvedores web Abrange onde as outras ferramentas específicas do idioma se encaixam.

É seguro testar o Regex em relação ao texto sensível?

O texto contra o qual você testa o Regex geralmente é o tipo sensível: linhas de log de produção com endereços IP e IDs de usuário, exportações com endereços de e-mail, arquivos de configuração com nomes de host internos. Esses são precisamente os dados que você não deveria Cole uma ferramenta que a envia para um servidor.

o Tester regex Toolz.dev é executado inteiramente em seu navegador A compilação de padrões, a correspondência, a extração de grupo - tudo isso é JavaScript do lado do cliente, sem solicitação de rede carregando seu padrão ou seu texto em qualquer lugar Corte sua conexão após o carregamento da página e ele continua funcionando Isso&#39; s uma garantia de arquitetura, não uma frase de política de privacidade, e it&#39; s o mesmo princípio browser-first por trás de cada ferramenta no conjunto, estabelecido no Guia de privacidade de dados.

O que significa que você pode colar as linhas de log reais - aquelas com o PII real que faz um padrão&#39; s casos de borda aparecer - e depurar contra eles com segurança That&#39; s o ponto inteiro: o testador só é útil se você alimentá-lo entrada real, e entrada real é muitas vezes exatamente o que você pode&#39; t enviar para outra pessoa&#39; s servidor.

FAQ

Como faço para testar uma expressão regular online?

Insira seu padrão no campo de padrão sem as barras ao redor, escolha seus sinalizadores e cole o texto da amostra na área de teste As partidas são destacadas instantaneamente e os grupos de captura são listados para cada partida Tudo é executado em seu navegador - nada é carregado.

Qual sabor regex esse testador usa?

Ele usa o mecanismo regexp do JavaScript (ECMAScript) integrado ao seu navegador, que é idêntico ao do Node.js. Os resultados correspondem ao comportamento do mesmo padrão em JavaScript e TypeScript. O JavaScript Regex difere do módulo PCRE, do Python e dos padrões Java em alguns recursos avançados, como grupos atômicos e recursões, então teste o sabor em que você implantará.

O que significam as bandeiras regex g, i, m e s?

A bandeira g (global) encontra todas as correspondências em vez de parar no primeiro A bandeira i torna a correspondência case-insensível A bandeira m (multiline) faz com que as âncoras ^ e $ correspondam nas quebras de linha em vez de apenas a string iniciar e terminar A bandeira s (dotAll) deixa o ponto corresponder aos caracteres newline também As bandeiras m e s são frequentemente confundidas - m muda as âncoras, s muda o ponto.

Como os grupos de captura funcionam no testador?

Parênteses em seu padrão criam grupos de captura. O testador lista cada grupo numerado com o texto capturado para cada correspondência, para que você possa verificar qual fatia da string de cada parte do padrão apanhada. Grupos nomeados escritos como (?...) são mostrados pelo nome ao lado dos grupos numerados.

Por que meu regex não corresponde a nada ou gera um erro?

Um padrão que não corresponde a nada geralmente tem um caractere específico ou um caractere especial sem escape, como um ponto literal ou um sinal de mais. Um padrão que gera um erro tem um problema de sintaxe, como um colchete desequilibrado ou parênteses. O testador exibe a mensagem de erro exata do mecanismo para que você possa localizar o problema rapidamente.

Como faço para combinar em várias linhas?

Ative o sinalizador S (dotall) se precisar que o ponto abranja quebras de linha e ative o sinalizador M (multilina) se desejar que as âncoras ^ e $ correspondam no início e no final de cada linha. A combinação de ambos permite que um único padrão funcione naturalmente contra entradas de várias linhas, como logs ou linhas CSV.

É seguro testar o RegEx em relação aos dados confidenciais?

Sim. toda correspondência acontece em JavaScript dentro do seu navegador - nenhum padrão ou texto de teste é enviado para qualquer servidor, nada é registrado e a ferramenta funciona com sua conexão desativada. Você pode testar com segurança arquivos de log, dados pessoais ou formatos proprietários.

Qual é a diferença entre um testador regex e um construtor regex?

Um testador regex executa um padrão existente em relação ao texto para que você possa verificá-lo e depurar, enquanto um construtor regex ajuda a construir um padrão a partir de componentes ou templates comuns. Use o Regex Builder neste site para montar um padrão e, em seguida, leve-o ao testador para verificar os dados reais da amostra.


Expressões regulares permanecem somente gravação até que você as execute contra entrada real, e as falhas são silenciosas - nada corresponde, muitas correspondências, o grupo errado captura, e nenhum erro diz A tester vira o padrão visível: Cole seu regex, alimente o texto real feio e observe exatamente o que ele pega antes de pegar a coisa errada na produção.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!