Remplacement de plusieurs chaînes en JavaScript
Le remplacement de chaînes est une tâche courante en programmation. En JavaScript, la méthode replace() vous permet de remplacer une seule correspondance d'une chaîne spécifiée par une nouvelle. Cependant, que se passe-t-il si vous souhaitez remplacer plusieurs chaînes par plusieurs autres chaînes en même temps ?
Considérez l'exemple suivant :
var str = "I have a cat, a dog, and a goat."; // Attempt to replace multiple strings with incorrect results str = str.replace(/cat/gi, "dog"); str = str.replace(/dog/gi, "goat"); str = str.replace(/goat/gi, "cat"); // Output: "I have a cat, a cat, and a cat"
Comme vous pouvez le constater, cela ne produit pas l'effet souhaité. résultat de "J'ai un chien, une chèvre et un chat". Au lieu de cela, il remplace incorrectement chaque instance de « chat » par « chien », et ainsi de suite.
Solution spécifique
Pour obtenir le résultat souhaité, vous pouvez utiliser un fonction pour gérer chaque remplacement :
var str = "I have a cat, a dog, and a goat."; var mapObj = { cat:"dog", dog:"goat", goat:"cat" }; str = str.replace(/cat|dog|goat/gi, function(matched){ return mapObj[matched]; }); // Output: "I have a dog, a goat, and a cat"
Dans cette approche, nous créons un objet map (mapObj) qui définit les paires clé-valeur de chaînes à remplacé. Ensuite, nous utilisons une expression régulière qui correspond à l'une de ces chaînes et la remplace par la valeur correspondante de l'objet map.
Généraliser la solution
Pour généraliser cette approche , vous pouvez créer dynamiquement l'expression régulière et mettre à jour l'objet cartographique si nécessaire :
var mapObj = {cat:"dog",dog:"goat",goat:"cat"}; var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); str = str.replace(re, function(matched){ return mapObj[matched]; });
Cette approche vous permet d'ajouter ou de supprimer des paires de remplacement sans modifier l'expression régulière lui-même.
Fonction réutilisable
Pour abstraire davantage le processus, vous pouvez créer une fonction réutilisable :
function replaceAll(str,mapObj){ var re = new RegExp(Object.keys(mapObj).join("|"),"gi"); return str.replace(re, function(matched){ return mapObj[matched.toLowerCase()]; }); }
Vous pouvez ensuite utiliser cette fonction pour remplacer plusieurs chaînes par plusieurs autres chaînes dans une chaîne donnée.
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!