Pular para o conteúdo

Localizar e substituir

Cole o texto, escreva quantos pares quiser e troque todos de uma vez. E quando uma linha não achar nada, a ferramenta diz por quê — em vez de devolver o texto igual e ficar calada.

O texto não sai do seu navegador — fechou a aba, sumiu.

O que trocar — uma linha por termo, todas de uma vez
Como procurar

O termo é literal: ponto é ponto, parêntese é parêntese, e o que você escreve na troca sai igual — cifrão incluído.

O resultado aparece aqui, enquanto você cola.

“Palavra inteira” não acha “você”

Este é o defeito que separa esta página das outras, e ele está em quase toda ferramenta de localizar e substituir escrita em JavaScript — inclusive nas boas. Elas montam a busca por palavra inteira com \b, o atalho que a linguagem oferece para “borda de palavra”. Só que esse atalho conhece exatamente as letras de a a z sem acento, mais números e o sublinhado. Para ele, “ç”, “ã” e “é” são tão letra quanto uma vírgula.

O estrago vem em dois sentidos opostos, e nós contamos os dois. No dicionário de português do LibreOffice, que tem 256.535 palavras:

  • 6.357 palavras (2,48%) simplesmente não são achadas quando você marca “palavra inteira”, porque terminam em letra acentuada. Não é uma lista de casos raros: entre as 100 palavras mais usadas do português falado, dez caem aí — é, você, está, , , , , até, quê e à. Somadas, são 11,9% de todo o texto corrido.
  • E o contrário também acontece. Procurar o pedaço ção com “palavra inteira” marcado não acha “ção” sozinho — e acha 5.780 palavras do dicionário por engano, “coração” e “educação” entre elas. ável acusa 3.799; ário, 1.582.

Aqui a fronteira pergunta se o caractere vizinho é letra ou número de verdade, pela tabela do Unicode, e não pela lista do inglês. “Você” é achado, “ção” dentro de “coração” não é. É a mesma correção que o conversor de texto já tinha precisado fazer para escrever título em português.

Trocar por “R$&” devolvia o termo buscado

Este é o mais silencioso, e ele pega até quem fez o resto certo. Em JavaScript, a função que quase toda ferramenta usa para substituir trata alguns caracteres do texto de troca como comando: $& significa “o que foi encontrado” e $$ significa um cifrão só. Quem escreve R$& recebe de volta a própria palavra que estava procurando; quem escreve 100$$ recebe 100$. Num país onde o símbolo de dinheiro é o cifrão, isso não é caso de laboratório.

Nesta ferramenta o texto de troca sai como você escreveu, sempre — a não ser que você marque “expressão regular”, e aí $1 volta a valer, que é justamente o que quem marca essa caixa quer.

O termo é literal: ponto é ponto

A outra metade do mesmo problema está na busca. Duas das quatro ferramentas cujo código lemos jogam o que você digitou direto num padrão de expressão regular, sem escapar nada. O resultado:

  • procurar 1.000 encontra também 1X000, porque o ponto virou “qualquer caractere”;
  • procurar foto (1) troca a coisa errada, porque o parêntese abriu um grupo;
  • procurar +55 quebra a substituição inteira com um erro de sintaxe — e o que você vê é um botão que não faz nada.

Aqui a busca literal não passa por expressão regular nenhuma: é uma varredura caractere por caractere. Nenhum desses três casos tem por onde acontecer.

Dez termos de uma vez, e por que isso muda o resultado

“Em massa” nesta busca significa trocar vários termos, e é o que falta nas outras: um campo “localizar”, um campo “substituir por”, e quem tem dez trocas roda dez vezes. O problema é que rodar dez vezes não dá o mesmo resultado.

Imagine trocar “gato” por “cão” e depois “cão” por “lobo”. Na segunda rodada, a ferramenta não distingue o “cão” que já estava no texto do “cão” que ela mesma acabou de escrever — e todo “gato” termina como “lobo”. É a cascata, e o Localizar e Substituir do Word faz igual. Aqui todas as linhas rodam numa passada só: cada trecho é decidido uma vez e o que a troca escreveu não é procurado de novo. Se você quer a cascata, a ferramenta avisa que ela não aconteceu e diz como conseguir — copiar o resultado e colar de volta.

Quando duas linhas casam no mesmo lugar, ganha a mais longa: com “São Paulo” → “SP” e “São” → “S.” na mesma lista, sai “SP”. A ordem em que você digitou as linhas não muda o resultado, o que é o mínimo para poder conferir.

“Não achou nada” é uma resposta ruim

É o que toda ferramenta dessa busca devolve quando o termo não aparece: o seu texto de volta, igualzinho, sem uma palavra. Você fica sem saber se errou o termo, se o texto tem alguma coisa estranha ou se era só uma caixinha marcada a menos.

Aqui cada linha que não trocou nada recebe um motivo e, quando existe conserto, o botão que aplica o conserto. Os casos são cinco, e o primeiro é o que ninguém consegue descobrir sozinho: o caractere invisível. Espaço duro, espaço de largura zero e hífen suave vêm colados quando se copia de PDF, de planilha ou de página web — e não têm desenho nenhum na tela. O seu termo e o texto parecem idênticos, e não são. A ferramenta diz qual dos dois lados está sujo e quantas ocorrências apareceriam depois de limpar.

Os outros quatro são caixa (“CASA” contra “casa”), acento (“publico” contra “público”), os dois ao mesmo tempo e o termo que existe mas está grudado em outra palavra. E o conjunto é sempre o menor que resolve: se bastava ignorar maiúsculas, não pedimos para você ignorar acento também.

Ignorar maiúsculas vem ligado. Ignorar acento, não

A assimetria é a mesma do removedor de linhas duplicadas, e pelo mesmo motivo. Quem procura “casa” quer achar o “Casa” do começo da frase. Já acento é conteúdo em português: “publico” e “público” são palavras diferentes, e juntar as duas sem você pedir seria a ferramenta decidindo no seu lugar. Se a sua lista tem nomes digitados por gente diferente, marque a caixa.

Existe ainda “manter a caixa do original”, que é para quando você troca uma palavra que aparece em vários formatos: achou “CASA”, devolve “LAR”; achou “Casa”, devolve “Lar”. Em caixa misturada ela não inventa nada e devolve exatamente o que você digitou.

E se eu precisar de expressão regular?

Tem, e é uma caixa para marcar. Ligada, o termo vira padrão, $1 na troca insere o grupo 1, e a bandeira “todas as ocorrências” já vem aplicada sem você escrever. Padrão inválido não quebra a página: a linha recebe a reclamação do navegador em texto e o resto continua funcionando.

Um aviso que vale mais aqui do que em qualquer tutorial em inglês: \w tem o mesmo defeito do \b e não considera “ã” uma letra. Em português, escreva \p{L} no lugar.

Serve para uma coluna do Excel?

Serve, e é um dos usos comuns: copie a coluna, cole aqui, troque, e copie de volta. O “Localizar e Substituir” do próprio Excel também faz um par por vez e também não conta o que fez — e, como ele compara sem tratar espaço duro, é ele que produz aquele caso em que você jura que as duas células são iguais.

Quanto texto ela aguenta?

Bem mais do que se costuma colar. Medido nesta máquina: dez mil caracteres com cinco linhas de troca em 11 milésimos de segundo, cem mil em 24, um milhão em 197 e um milhão com vinte linhas em 460. O seu aparelho pode ser mais lento, mas a conta cresce em linha reta. A tela desenha os primeiros vinte mil caracteres para não travar o navegador; o botão copia tudo.

O texto sai do meu computador?

Não. A conta inteira acontece dentro do seu navegador, enquanto você digita: não existe servidor recebendo o seu texto, não existe cadastro e nada fica guardado. Fechou a aba, acabou. É por isso que o resultado aparece sem botão de “enviar” e sem espera — e é o que permite colar aqui aquele contrato que você não colaria num site qualquer.

Vale dizer o que não medimos: não contamos quantas ferramentas existem nessa busca, e as que fazem a troca no servidor delas não foram testadas. O que está escrito acima veio de ler o JavaScript de quatro delas e rodar o algoritmo de cada uma contra os mesmos oito casos.