विशिष्ट समाधान
आप प्रत्येक को बदलने के लिए एक फ़ंक्शन का उपयोग कर सकते हैं।
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()];
});
}
तो फिर आप बस उस फ़ंक्शन के इच्छित स्ट्रैप और मैप को पास कर सकते हैं और यह परिवर्तित स्ट्रिंग को लौटा देगा।
समारोह के साथ बेला
पुराने ब्राउज़र में Object.keys काम करता है यह सुनिश्चित करने के लिए, MDN या Es5 से एक पॉलीफ़िल जोड़ें ।