tools / regex
regex/
Testador de regex JavaScript ao vivo: destaca correspondências, lista grupos de captura e mostra uma prévia das substituições.
Texto de teste
Correspondências destacadas
Lista de correspondências
| # | Posição | Correspondência | Grupos |
|---|
Substituir
Perguntas frequentes
Qual mecanismo de regex isto usa e é igual ao do Python ou PCRE?
Usa o mecanismo de regex JavaScript embutido no navegador, então a sintaxe difere um pouco de Python, PCRE e Java. Grupos nomeados são escritos (?<name>...) e não (?P<name>...) como no Python; flags inline como um (?i) no início não são aceitas, então marque a flag i; quantificadores possessivos e grupos atômicos também não existem. Se uma sintaxe mais nova, como lookbehind, funciona depende do seu navegador.
Por que uma regex que copiei de um código não encontra nada?
O mais provável é que as barras ao redor, as flags no final ou as barras invertidas de escape tenham vindo junto. No campo do padrão, digite apenas o que fica entre as duas barras e marque flags como g e i à direita. Se você copiou de uma string JavaScript, troque \\d+ por \d+, pois o campo não precisa que as barras invertidas sejam escapadas uma segunda vez.
Por que só acho uma correspondência, ou por que ., ^ e $ se comportam de forma estranha?
Veja primeiro as flags ao lado do campo do padrão. Sem g, só a primeira correspondência é considerada, e o cabeçalho da lista avisa isso. O ponto não casa com quebras de linha, a menos que você marque s; ^ e $ só casam com o início e o fim do texto inteiro, a menos que você marque m para correspondência por linha. y é o modo sticky: as correspondências devem começar no início e se suceder sem lacunas, então raramente é necessário.
O que fazer com a mensagem "A correspondência levou mais de 1.5 s e foi interrompida"?
A regex faz backtracking demais no seu texto e precisa ser reescrita. Um culpado típico é um quantificador aninhado como (a+)+, cujo tempo de execução se multiplica em um texto longo que não casa. A página executa a regex em uma thread em segundo plano e a interrompe após 1,5 segundo, então a própria página nunca trava. Tornar os quantificadores específicos, remover o aninhamento ou usar uma faixa de caracteres mais estreita costuma resolver.
O que acontece quando há muitas correspondências ou o texto é muito longo?
O destaque e a lista mostram no máximo as primeiras 1000 correspondências e avisam quando há mais; o resultado da substituição não é afetado por esse limite. Quando o texto tem mais de 200.000 caracteres, a página espera você parar de digitar por cerca de 0,4 segundo antes de recalcular. Não há outro limite de tamanho, então a velocidade depende principalmente da própria regex.
Como escrevo o modelo de substituição?
Segue a sintaxe de substituição do JavaScript: $1 e $2 são grupos de captura numerados, $<name> é um grupo nomeado, $& é a correspondência inteira e $$ é um cifrão literal. Deixe o modelo vazio para apagar o que foi encontrado. Sem a flag g, só a primeira correspondência é substituída.
As predefinições de número de celular e documento de identidade podem ser usadas para validação do jeito que estão?
Use-as como ponto de partida, não como validação rigorosa. A predefinição de celular aceita 11 dígitos começando com 1 cujo segundo dígito é de 3 a 9, e não trata códigos de país. A de documento de identidade só verifica o formato de 18 caracteres: dias de 01 a 31 são aceitos em todos os meses, o dígito verificador final não é conferido e o código da região não é checado contra regiões reais. As predefinições de e-mail e URL cobrem apenas formas comuns, e a de URL aceita só http e https. Clicar em uma predefinição substitui o padrão no campo e redefine as flags para apenas g.
O texto que eu digito é enviado?
Não. A regex roda em uma thread em segundo plano do seu navegador, e o texto de teste, o padrão e o modelo de substituição nunca são enviados a um servidor. A página também não guarda o que você digita.