Português (Brasil)

Ferramentas de texto e do dia a dia · Kit de ferramentas de texto

Como funciona a pesquisa de palavras inteiras: limites das palavras e o problema do gato | cachorro

· Como funciona

expressão regular localizar e substituir edição de texto

As palavras gato e cachorro passando pelos limites enquanto concatenadas permanecem inalteradas
Ilustração vetorial original ToolAcre

Explica o que é um limite de palavra em expressões regulares JavaScript, por que 'cat' não deve corresponder dentro de 'concatenate' e por que uma alternância como cat|dog deve ser agrupada antes que os limites sejam adicionados.

A renomeação que mudou para 'concatenar' - por que simplesmente localizar e substituir uma palavra curta danifica palavras mais longas

A renomeação de um produto parece inofensiva até que um nome curto apareça dentro de palavras não relacionadas. Substituir cada ocorrência de `cat` por `lynx` altera `concatenate` para `conlynxenate`, mesmo que nenhum editor pretendesse renomear parte desse verbo. Uma contagem de correspondências por si só não pode proteger o documento quando a regra de pesquisa é muito ampla.

A correspondência de palavras inteiras restringe a regra antes que qualquer substituição aconteça. Em ToolAcre, ativar a palavra inteira torna `cat` autônomo elegível, deixando as mesmas letras dentro de `concatenate` intactas. A distinção é estrutural e não baseada em dicionário: o mecanismo de expressão regular verifica os caracteres imediatamente ao lado de cada correspondência possível.

O que \b significa - a posição de largura zero entre um caractere de palavra e um caractere que não é de palavra

Em uma expressão regular JavaScript, `` marca um limite de palavra de largura zero. Não consome letras, espaços ou pontuação. Em vez disso, ele é bem-sucedido em uma posição em que um lado é um caractere de palavra e o outro lado não, incluindo o início ou o fim do texto quando o caractere adjacente se qualifica como um caractere de palavra.

A categoria `w` de JavaScript fornece os caracteres de palavras relevantes para esta implementação: ASCII letras, dígitos e sublinhado. Portanto, `cat` corresponde a `cat` ao lado de espaços, vírgulas ou finais de linha, mas não ao segmento `cat` dentro de `concatenate`, porque ambos os lados desse segmento continuam através de caracteres de palavra e não existe limite lá.

Palavra inteira no modo literal — o texto de pesquisa é escapado primeiro e depois envolto em limites

Com o Regex desativado, ToolAcre primeiro escapa de todos os metacaracteres de expressão regular no texto de pesquisa. Um ponto final permanece um ponto literal, os parênteses permanecem parênteses literais e um sinal de mais permanece um sinal de mais. Somente após essa etapa de escape a palavra inteira envolve a fonte resultante, de modo que a pontuação do usuário não pode se tornar silenciosamente a sintaxe regex.

O wrapper é `(?:… )` sem o espaço exibido: o `(?:…)` interno é um grupo sem captura. Para um literal simples como `cat`, o efeito é equivalente a `cat`. O agrupamento ainda é importante porque um caminho de compilação deve lidar com termos simples e alternativas mais complicadas com segurança, sem alterar a numeração do grupo de captura.

Palavra inteira no modo regex — por que cat|dog deve ser delimitado como um grupo, ou o limite é vinculado a apenas um ramo

O modo Regex deixa o padrão inserido intacto, mas a palavra inteira ainda o agrupa antes de adicionar limites. Para `cat|dog`, ToolAcre compila a forma conceitual `(?:cat|dog)`. Ambas as alternativas devem, portanto, começar e terminar nos limites das palavras, de modo que `cat` autônomo e `dog` autônomo correspondam sob a mesma regra.

Sem esse grupo, `cat|dog` se dividiria em duas ramificações: um limite esquerdo restringiria apenas `cat`, enquanto um limite direito restringiria apenas `dog`. A alternância tem precedência menor que a sequência circundante. O agrupamento é o que aplica ambas as asserções de limite a toda a escolha, em vez de distribuir uma asserção de forma desigual.

Exemplo resolvido – renomear um produto em um documento com Palavra inteira ativada e inspecionar a contagem de substituições em relação às expectativas

Cole uma passagem representativa contendo `cat`, `dog`, `concatenate`, `dogged` e pontuação como `cat, dog.` Insira `cat|dog`, ative Regex e Palavra inteira e execute Substituir tudo pelo novo nome do produto. As duas palavras animais independentes deveriam mudar; as palavras mais longas devem permanecer exatamente como estavam.

Leia a contagem de substituições relatada antes de aceitar a edição. Se o documento tiver três referências independentes conhecidas, mas a ferramenta relatar duas ou doze, selecione Desfazer e inspecione os contextos de amostra. ToolAcre conta as correspondências antes de chamar a substituição de string padrão, portanto, o total exibido é uma verificação prática da regra de pesquisa que você realmente compilou.

Onde os limites das palavras surpreendem você - os caracteres das palavras de JavaScript são ASCII letras, dígitos e sublinhados, portanto, palavras acentuadas e não latinas precisam ser testadas

Esses limites não implementam um dicionário multilíngue ou algoritmo de segmentação de texto Unicode. Como letras acentuadas e escritas não latinas estão fora da categoria de palavras no estilo ASCII usada aqui, a palavra inteira pode retornar zero ou produzir posições de borda surpreendentes para termos como `café`. A pontuação dentro de um termo de pesquisa pode causar a mesma incompatibilidade.

Teste o idioma e a ortografia exatos antes de uma edição em massa, especialmente para nomes que contenham acentos, apóstrofos ou hífens. Uma afirmação de limite compara apenas categorias de caracteres adjacentes; não sabe se a tipografia forma uma palavra humana. Se a amostra falhar, use uma regex projetada deliberadamente para esses ambientes, em vez de confiar na caixa de seleção.

Onde os limites das palavras JavaScript surpreendem você: caracteres de palavras no estilo ASCII não são palavras linguísticas

A ferramenta fornece uma opção separada que diferencia maiúsculas de minúsculas, ao contrário de qualquer implicação de que o tratamento de casos está ausente da interface. Limpar adiciona o sinalizador que não diferencia maiúsculas de minúsculas de JavaScript. No entanto, a implementação usa apenas correspondência global mais insensibilidade opcional a maiúsculas e minúsculas; ele não adiciona sinalizadores Unicode, multilinha, ponto-tudo, fixo ou outros.

Este artigo também não transforma `` em um limite compatível com Unicode nem resolve a tokenização específica do idioma. Os escapes de propriedade JavaScript não são um substituto aqui porque a ferramenta não compila padrões com o sinalizador Unicode. Para trabalhos editoriais multilíngues, estabeleça casos de teste explícitos e escolha um padrão suportado pelo motor do navegador em uso.

Existem opções de caso na ferramenta; Os limites de palavras compatíveis com Unicode não

A palavra inteira é uma regra de composição, não um segundo mecanismo de substituição. O modo literal escapa da pesquisa; o modo regex o preserva; então, o mesmo grupo não capturador e dois limites circundam qualquer um dos resultados. Essa ordem protege a pontuação literal e faz com que alternativas de regex como `cat|dog` se comportem como uma expressão limitada.

Use a opção quando termos autônomos do estilo ASCII forem os alvos pretendidos e, em seguida, trate a contagem de substituições e o controle de Desfazer como salvaguardas em vez de decoração. Abra Localizar e substituir de ToolAcre, teste a alternância em exemplos independentes e incorporados e aplique-a apenas ao documento completo depois que esses exemplos se comportarem conforme o esperado.