Idioma: Português

tools / regex

regex/

Testador de regex JavaScript ao vivo: destaca correspondências, lista grupos de captura e mostra uma prévia das substituições.

Predefinições

Texto de teste

Correspondências destacadas


      

Lista de correspondências

#PosiçãoCorrespondênciaGrupos

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.