Maison > interface Web > js tutoriel > Comment remplacer efficacement plusieurs chaînes en JavaScript ?

Comment remplacer efficacement plusieurs chaînes en JavaScript ?

Linda Hamilton
Libérer: 2024-11-29 17:14:10
original
823 Les gens l'ont consulté

How to Efficiently Replace Multiple Strings in JavaScript?

Remplacement massif de chaînes en JavaScript

La tâche de remplacer plusieurs mots d'une chaîne par des mots différents se pose fréquemment en programmation. Considérons le scénario suivant :

const str = "I have a cat, a dog, and a goat.";
Copier après la connexion

Nous souhaitons transformer cette chaîne en "J'ai un chien, une chèvre et un chat" en remplaçant "chat" par "chien", "chien" par "chèvre ", et "chèvre" avec "chat".

Problème : les remplacements consécutifs conduisent à une sortie incorrecte

Une approche naïve impliquerait d'utiliser la méthode replace() plusieurs fois :

str = str.replace(/cat/gi, "dog");
str = str.replace(/dog/gi, "goat");
str = str.replace(/goat/gi, "cat");
Copier après la connexion

Malheureusement, ce code produit le résultat incorrect : "J'ai un chat, un chat et un chat". En effet, les deuxième et troisième remplacements écrasent les modifications apportées par les précédents.

Solution : Utilisation d'une carte et d'une fonction de remplacement personnalisée

Pour résoudre ce problème, nous avons besoin d’une approche plus globale qui remplace simultanément tous les mots cibles. Ceci peut être réalisé en définissant un objet cartographique contenant les remplacements et en utilisant une fonction de remplacement personnalisée :

const mapObj = {
  cat: "dog",
  dog: "goat",
  goat: "cat",
};

const str = str.replace(/cat|dog|goat/gi, (matched) => {
  return mapObj[matched];
});
Copier après la connexion

Générer dynamiquement le modèle Regex

Pour créer la solution plus généralisable, nous pouvons générer dynamiquement le modèle d'expression régulière en fonction des clés de la carte object :

const re = new RegExp(Object.keys(mapObj).join("|"), "gi");

const str = str.replace(re, (matched) => {
  return mapObj[matched];
});
Copier après la connexion

Fonction réutilisable pour le remplacement massif de chaînes

Enfin, nous pouvons encapsuler cette approche dans une fonction réutilisable :

const replaceAll = (str, mapObj) => {
  const re = new RegExp(Object.keys(mapObj).join("|"), "gi");

  return str.replace(re, (matched) => {
    return mapObj[matched.toLowerCase()];
  });
};
Copier après la connexion

Cette fonction prend une chaîne et une carte de remplacements et renvoie la chaîne transformée.

En résumé, il existe plusieurs façons de remplacer plusieurs chaînes avec plusieurs autres chaînes en JavaScript. La solution présentée ici utilise un objet cartographique et une fonction de remplacement personnalisée pour garantir que tous les remplacements sont effectués simultanément, ce qui donne lieu à la sortie souhaitée avec précision.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal