Oi, Gustavo, tudo bem?
Como os nomes já estão guardados no banco de dados com caracteres especiais, eu desconheço uma solução que consiga fazer esse tipo de busca. Isso porque seria necessário que o código conseguisse relacionar qualquer vogal aos seus correspondentes com acentos, e regexs não possuem uma solução nativa para isso. O que regexs conseguem fazer, por exemplo, é relacionar letras maiúsculas às suas correspondentes minúsculas, e vice-versa, utilizando a flag i
.
Contudo, existe uma solução para uma "situação inversa". Se o nome do autor vier como "Magalhães" pela busca, conseguimos transformar os caracteres especiais para seus correspondentes não especiais (podemos chamar esse processo de normalização, que também significa padronização). Podemos utilizar um código como o abaixo:
const str = "Magalhães";
const strNormalizada = str.normalize("NFD").replace(/\p{Diacritic}/gu, "");
console.log(strNormalizada); // Magalhaes
Essa resposta do stack overflow explica em detalhes como esse código funciona.
Dessa forma, caso haja uma situação onde você não quer que haja distinção entre caracteres especiais e os não especiais, você já deve salvar os nomes no banco de dados sem os caracteres especiais. Ou seja, ao cadastrar um novo nome, você poderia usar um código como o acima para salvar o nome normalizado (assim, o nome já ficaria salvo como "Magalhaes" no banco de dados).
Em seguida, ao realizar uma busca, você aplicaria o código acima novamente ao receber o dado de busca. Assim, se for passado "Magalhães", a string será normalizada para não possuir caracteres especiais (ficando "Magalhaes") e a correspondência do banco de dados será encontrada.
Espero ter ajudado! Abraços e bons estudos :)