Конкретне рішення
Ви можете використовувати функцію для заміни кожного.
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 у старих веб-переглядачах, додайте полі-заливку, наприклад, з MDN або Es5 .