Comment remplacer un mot par un autre en JavaScript ?

Réponses rédigées par Antoine
Dernière mise à jour : 2023-02-15 12:12:52
Thèmes : javascript - remplacer
Question

Bonjour,

J'ai tout un texte HTML où je dois remplacer tous les articles "un" par "le", coté client, donc à priori en JavaScript.

J'ai essayé d'utiliser la méthode replace() mais elle remplace aussi les un inclus dans les mots :

"unique "devient "leique".

Réponse

Vous utilisez la bonne méthode : replace() permet de remplacer une chaine par une autre selon une expression régulière.

<script>
let texte = "un chien a un caractère unique";
let remplacement = /un /gi;
let nouveauTexte = texte.replace(remplacement, "le ");
alert(nouveauTexte);
</script>

L'expression régulière /un /gi recherche la chaine "un " puis le g permet de rechercher toutes les occurrences, et le i signifie qu'on remplace à la fois les majuscules et minuscules.

Dans votre cas la méthode replace() va avoir ses limites. Ainsi la chaine "un animal" va être remplacé par "le animal" au lieu de "l'animal".

Pour rappel on utilise l'article défini l' devant les noms commençant par une voyelle ou bien un h muet. Il faudrait donc tester la présence d'une éventuelle voyelle ou de la lettre H ; puis ensuite effectuer le remplacement adéquat.

Voici la première version d'une fonction qui effectue le job. On place la liste des voyelles et la lettre h dans un tableau. Ensuite on boucle pour trouver les positions de la chaine à remplacer ; puis on utilise la méthode substring pour identifier la première lettre qui suit la chaine. Si la lettre est dans le tableau on remplace par l'article l' ou bien par le.

<script>
let texte = "un chien est un animal qui a un caractère unique";
let voyelle = ['a', 'e', 'i', 'o', 'u', 'y', 'h'];
function remplacerArticle(texte, chaine) 
{
  i = 0;
  var longueur = chaine.length;
    while ((iteration = texte.indexOf(chaine, i)) > -1) 
    {
      const caractere = texte.substring(texte.indexOf(chaine) + longueur).charAt(0);
      if ((voyelle.includes(caractere)) && (caractere != 'undefined')) 
      {
        texte = texte.replace(chaine, "l'");
      }
      else
      {
        texte = texte.replace(chaine, "le ");
      }
    }
   return texte;
}
alert(remplacerArticle(texte, "un "));
</script>