Конкретное решение
Вы можете использовать функцию, чтобы заменить каждую.
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
Обобщая это
Если вы хотите динамически поддерживать регулярные выражения и просто добавлять будущие обмены на карту, вы можете сделать это
new RegExp(Object.keys(mapObj).join("|"),"gi");
генерировать регулярное выражение. Так что это будет выглядеть так
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];
});
И чтобы добавить или изменить другие замены, вы можете просто отредактировать карту.
скрипка с динамическим регулярным выражением
Делая его многоразовым
Если вы хотите, чтобы это был общий шаблон, вы можете использовать это в такой функции
function replaceAll(str,mapObj){
var re = new RegExp(Object.keys(mapObj).join("|"),"gi");
return str.replace(re, function(matched){
return mapObj[matched.toLowerCase()];
});
}
Тогда вы можете просто передать str и карту замен, которые вы хотите, функции, и она вернет преобразованную строку.
возиться с функцией
Чтобы гарантировать, что Object.keys работает в старых браузерах, добавьте polyfill, например, из MDN или Es5 .