Özel Çözüm
Her birini değiştirmek için bir işlev kullanabilirsiniz.
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];
});
jsfiddle örneği
Genelleme
Normal ifadeyi dinamik bir şekilde korumak ve yalnızca gelecekteki exchange'leri haritaya eklemek istiyorsanız, bunu yapabilirsiniz
new RegExp(Object.keys(mapObj).join("|"),"gi");
regex üretmek için. O zaman böyle görünecekti
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];
});
Daha fazla değişiklik eklemek veya değiştirmek için haritayı düzenleyebilirsiniz.
dinamik regex ile keman
Yeniden Kullanılabilir Yapma
Bunun genel bir desen olmasını istiyorsanız, bunu böyle bir işleve çekebilirsiniz.
function replaceAll(str,mapObj){
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
return str.replace(re, function(matched){
return mapObj[matched.toLowerCase()];
});
}
Böylece str'yi ve fonksiyona istediğiniz değişikliklerin haritasını aktarabilirsiniz ve dönüştürülmüş dizeyi döndürür.
işlev ile keman
Object.keys'in eski tarayıcılarda çalıştığından emin olmak için, örneğin MDN veya Es5 gibi bir çoklu dolgu ekleyin .