Como fazer uma busca ignorando acentuação em JavaScript?

Para fazer uma busca ignorando acentuação em JavaScript, você pode utilizar expressões regulares para remover os acentos das palavras antes de compará-las.

Aqui está um exemplo de uma função que realiza essa transformação:

function removerAcentos(texto) {
  return texto.normalize('NFD').replace(/[\u0300-\u036f]/g, '');
}

function buscarPalavra(palavra, texto) {
  const palavraSemAcento = removerAcentos(palavra.toLowerCase());
  const textoSemAcento = removerAcentos(texto.toLowerCase());

  // Realizar a busca no texto sem acento
  if (textoSemAcento.includes(palavraSemAcento)) {
    return true;
  }
  
  return false;
}

// Exemplo de uso da função
const resultado = buscarPalavra('caminhao', 'O caminhão está na garagem.');

console.log(resultado); // true

Nesse exemplo, a função removerAcentos recebe um texto como parâmetro e utiliza o método normalize para remover as combinações de caracteres acentuados, como “ó” (U+00F3) e “ô” (U+00F4).

Em seguida, é utilizada uma expressão regular para substituir todas as outras formas de acentuação que não foram removidas pelo normalize, como os acentos agudos e circunflexos. Essa expressão regular [\\u0300-\\u036f] corresponde a todos os caracteres Unicode dentro desse intervalo de código e o modificador g indica que a substituição deve ser feita em todas as ocorrências.

A função buscarPalavra recebe uma palavra e um texto como parâmetros. Ela converte ambas as strings para caixa baixa utilizando o método toLowerCase e chama a função removerAcentos para remover os acentos de ambas.

Por fim, a função verifica se a palavra sem acento está contida no texto sem acento utilizando o método includes.

Dessa forma, a função buscarPalavra retornará true se a palavra sem acento for encontrada no texto sem acento e false caso contrário.

No exemplo de uso, a palavra “caminhão” é encontrada no texto “O caminhão está na garagem.”, mesmo com as variações de acentuação.