What is the simplest way in JS to replace multiple things in string at once (without them interfering)? Like
"tar pit".replaceArray(['tar', 'pit'], ['capitol', 'house']);
...so it produces "capitol house", not "cahouseol house"?
asked Sep 5, 2013 at 15:20
Kuroki Kaze
8,5324 gold badges38 silver badges49 bronze badges
-
1the simplest answer: regexgion_13– gion_132013年09月05日 15:22:49 +00:00Commented Sep 5, 2013 at 15:22
2 Answers 2
var replaceArray = function(str, from, to) {
var obj = {}, regex;
from.forEach(function(item, idx){obj[item] = to[idx];});
regex = new RegExp('(' + from.join('|') + ')', 'g');
return str.replace(regex, function(match){return obj[match]});
}
replaceArray("tar pit", ["tar", "pit"], ["capitol", "house"]);
answered Sep 5, 2013 at 15:32
Yury Tarabanko
45.2k10 gold badges88 silver badges99 bronze badges
Sign up to request clarification or add additional context in comments.
1 Comment
Moazzam Khan
+1 for much better code than mine, cant see my code over you :).
how about this -
function replaceArray(text, toBeReplacedArray, replacementArray) {
for (var i = 0; i < toBeReplacedArray.length; i++) {
var re = new RegExp(toBeReplacedArray[i], 'g');
text = text.replace(re, '__' + i + '__');
}
for (var i = 0; i < replacementArray.length; i++) {
var re = new RegExp('__' + i + '__', 'g');
text = text.replace(re, replacementArray[i]);
}
return text;
}
replaceArray("tar pit", ['tar', 'pit'], ['capitol', 'house']);
answered Sep 5, 2013 at 15:34
Moazzam Khan
3,1702 gold badges23 silver badges38 bronze badges
Comments
lang-js