Ferramentas de texto e do dia a dia · Kit de ferramentas de texto
Por que uma ferramenta localizar e substituir deve sobreviver a um regex digitado pela metade
· Por que é importante
localizar e substituir expressões regulares edição de texto
A digitação de um padrão é incremental, portanto, um colchete de abertura solitário é um estado normal; esta postagem argumenta que proteger a compilação, deixar o texto intacto e oferecer desfazer são recursos de correção, não de polimento.
A ferramenta que limpou a caixa em um colchete desequilibrado – como um toque de tecla pode destruir uma hora de limpeza
Uma caixa localizar e substituir geralmente contém trabalhos que demoraram muito mais para serem montados do que o padrão de pesquisa ao lado dela. Se uma expressão incompleta puder passar pela interface, limpar o editor ou deixar seu estado incerto, a ferramenta tornou a entrada de padrão mais perigosa do que a tarefa de limpeza que deveria simplificar.
O repositório não documenta um incidente específico em que ToolAcre apagou uma hora de trabalho, portanto essa história não pode ser apresentada como fato. De qualquer forma, o requisito defensável é mais forte: o texto do usuário deve permanecer inalterado sempre que a compilação do padrão falhar, independentemente da quantidade de texto presente ou de quanto tempo levou para ser preparado.
A falha destrutiva que uma ferramenta de localização e substituição deve evitar
Expressões regulares geralmente não são inseridas com um toque de tecla perfeito. Uma pessoa digita um parêntese de abertura antes do parêntese de fechamento ou inicia uma classe de personagem com um colchete de abertura antes de adicionar seus membros. Durante esses momentos, o campo contém um padrão sintaticamente incompleto, embora o processo de edição esteja ocorrendo normalmente.
Tratar esse estado temporário como um comportamento excepcional do usuário produz um editor frágil. A resposta útil é o feedback local imediato: mostre que o padrão atual não pode ser compilado, preserve todos os outros campos e deixe que o próximo pressionamento de tecla o conserte. Um erro de expressão regular inválido deve descrever o rascunho atual e não encerrar o fluxo de trabalho.
Padrões incompletos são normais enquanto uma expressão regular está sendo escrita
ToolAcre roteia todas as pesquisas fornecidas pelo usuário por meio de `compilePattern`. As pesquisas literais primeiro escapam dos metacaracteres de expressão regular, enquanto o modo Regex usa a fonte fornecida diretamente. A compilação acontece dentro de um bloco `try` e a falha retorna um padrão nulo mais uma string de erro em vez de permitir que a exceção JavaScript escape para a interface.
Esse resultado controla o caminho de substituição. Quando a compilação reporta um erro, `findReplace` retorna o texto original, zero substituições e o erro. Ele não tenta uma pesquisa parcial ou reescrita. A proteção, portanto, protege a estabilidade da interface e a integridade dos dados: nenhum padrão válido significa que não há mutação no conteúdo do editor.
Relatar o que aconteceu – por que uma contagem de substituição após cada execução é a verificação de sanidade mais rápida
Uma substituição bem-sucedida ainda pode estar logicamente errada. Uma expressão ampla pode corresponder a mais datas do que o pretendido, enquanto uma opção de caso ou limite de palavra inteira pode reduzir o conjunto a zero. ToolAcre conta as correspondências antes de chamar a substituição de string padrão e retorna esse número com o texto reescrito, tornando o escopo visível após cada execução.
A contagem é uma verificação rápida de sanidade, e não uma prova de que todas as correspondências eram desejáveis. Se doze registros eram esperados e o resultado diz 1 ou 1,200, pare e inspecione o padrão antes de copiar a saída. Um número preciso transforma uma vaga suspeita em um motivo concreto para desfazer e revisar a busca.
Desfazer como rede de segurança – cada transformação é reversível, com um limite documentado de cinquenta operações
A segurança da compilação evita que padrões inválidos alterem o texto, mas padrões válidos ainda podem expressar a intenção errada. Desfazer cobre essa segunda categoria. O Text Toolkit registra transformações para que uma substituição concluída possa ser revertida após a contagem ou saída de resultados revelar que a pesquisa era muito ampla, muito restrita ou agrupada incorretamente.
O limite do histórico documentado é de cinquenta operações, portanto, desfazer é um buffer funcional em vez de um controle de versão permanente. Use-o para experimentar em pequenos passos, mas não o trate como armazenamento de arquivo. Para materiais importantes, guarde o original separadamente e copie a saída final somente após revisar o texto e a contagem de substituições.
Exemplo resolvido - construindo um padrão de reformatação de data caractere por caractere e observando o erro aparecer e desaparecer sem perder o texto
Considere alterar as datas de `2024-01-02` para `02/01/2024`. Habilite Regex e comece com um parêntese de abertura. Nesse instante, o mecanismo do navegador relata uma expressão inválida, ToolAcre exibe a mensagem e o texto permanece intacto. Adicione `\d{4}` e o parêntese de fechamento, e o primeiro ano capturado se tornará válido.
Continue até que a pesquisa seja `(\d{4})-(\d{2})-(\d{2})` e use `$3/$2/$1` como substituto. As três capturas reordenam ano, mês e dia sem redigitar cada linha. Execute Substituir tudo, compare a contagem relatada com as linhas esperadas e desfaça imediatamente se o texto numérico não relacionado também corresponder.
O que isso não cobre – problemas de desempenho de regex, como retrocesso catastrófico em entradas enormes
A proteção de compilação aborda erros de sintaxe, não o tempo de execução de expressões válidas. Um padrão pode ser compilado com sucesso, mas retroceder fortemente em uma entrada específica. Como a substituição é executada no thread principal, uma expressão patológica aplicada a um documento grande ainda pode fazer com que a guia do navegador pare de responder, mesmo que nenhuma exceção tenha sido lançada.
A ferramenta também executa Substituir tudo em vez de percorrer as correspondências individualmente e não visualiza as correspondências destacadas antes da mutação. Esses limites tornam importantes os dados de teste restritos e a contagem de substituições. Valide uma expressão desconhecida em uma pequena amostra representativa antes de aplicá-la à única cópia de um documento grande.
Conclusão: o Text Toolkit trata padrões inválidos como informação, não como falha, para que você possa experimentar com segurança
Um padrão incompleto é uma informação sobre um estado de edição, e não uma evidência de que o usuário falhou. ToolAcre mantém essa distinção em seus valores de retorno: a compilação pode relatar um erro sem lançar, a substituição pode relatar zero alterações sem tocar na fonte e uma operação bem-sucedida pode relatar exatamente quantas correspondências ela reescreveu.
Esse design apoia a experimentação sem fingir que as expressões regulares são inofensivas. Preservar a entrada em caso de falha de compilação, inspecionar contagens após sucesso e usar desfazer quando um padrão válido estiver conceitualmente errado. Juntos, esses comportamentos tornam a localização e a substituição previsíveis o suficiente para usuários ocasionais de regex que precisam mais de feedback do que de punição por uma expressão digitada pela metade.