특정 솔루션
함수를 사용하여 각각을 교체 할 수 있습니다.
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 등 의 폴리 필을 추가하십시오 .