1
resposta

[Dúvida] função replace challenge

Quando uso a função replace

    function criptografar(){
        texto = document.getElementById('recebetexto').value;
        var novotexto = texto.replace(/a/gi,"ai").replace(/e/gi,"enter").replace(/i/gi,"imes").replace(/o/gi,"ober").replace(/u/gi,"ufat");
        alert(novotexto);

} a nova palavra ai é substituida mais uma vez, ficando "aimes" ao inves de "ai", como faço para ficar só "ai" mesmo?

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

O problema ocorre porque após a substituição de "a" por "ai", as próximas substituições podem afetar também as instâncias recém-criadas de "ai". Para resolver isso, você pode usar uma abordagem diferente, usando uma função de substituição personalizada.

Aqui está uma maneira de fazer isso:

function criptografar() {
    texto = document.getElementById('recebetexto').value;
    
    var novotexto = texto.replace(/a/gi, function(match) {
        return match.toLowerCase() === 'a' ? 'ai' : 'Ai';
    }).replace(/e/gi, "enter")
      .replace(/i/gi, "imes")
      .replace(/o/gi, "ober")
      .replace(/u/gi, "ufat");

    alert(novotexto);
}

Nesta versão, a substituição para "a" é tratada por uma função de substituição personalizada que verifica se o caractere original é "a" em minúsculo antes de substituir. Isso garante que apenas instâncias isoladas de "a" sejam substituídas por "ai". As demais instâncias recém-criadas de "ai" não serão afetadas pela substituição subsequente.

Essa abordagem deve resolver o problema que você está enfrentando.