来自PHP背景,我有点被str_replace
函数所破坏,你可以传递一系列干草堆&针。
我还没有在Javascript中看到过这样的功能,但是我已经设法完成了工作,尽管很难看,但下面显示的代码:
return myString.replace(" ", "-").replace("&", ",");
然而,由于我需要用另一个角色替换某些角色,我相信有更好的方法来实现这一点 - 无论是性能还是更漂亮。
那么我该怎么做呢?
答案 0 :(得分:5)
您可以使用:
var str = "How are you doing?";
var replace = new Array(" ", "[\?]", "\!", "\%", "\&");
var by = new Array("-", "", "", "", "and");
for (var i=0; i<replace.length; i++) {
str = str.replace(new RegExp(replace[i], "g"), by[i]);
}
将它放入函数中:
function str_replace(replace, by, str) {
for (var i=0; i<replace.length; i++) {
str = str.replace(new RegExp(replace[i], "g"), by[i]);
}
return str;
}
用法示例小提琴:http://jsfiddle.net/rtLKr/
答案 1 :(得分:3)
JavaScript的优点在于您可以扩展基本类型的功能,以便您可以将方法添加到String
本身:
// v --> array of finds
// s --> array of replaces
String.prototype.replaceAll = function(v, s){
var i , ret = this;
for(i=0;i<v.length;i++)
ret = ret.replace(v[i], s[i]);
return ret;
}
现在使用它:
alert("a b c d e f".replaceAll(["a", "b"], ["1", "2"])); //replaces a b with 1 2
演示是here。
答案 2 :(得分:2)
如果对你来说更容易,你可能会喜欢这样的东西;
str.replace(/[ab]/g, function (match, i) {
switch (match) {
case "a":
return "A";
case "b":
return "B";
}
}));
即。在参数1中创建一个正则表达式,接受你正在寻找的所有标记,然后在函数中添加个案来进行替换。
答案 3 :(得分:2)
以下是其他一些答案的混合。我喜欢它,因为替换的键值声明
function sanitize(str, replacements) {
var find;
for( find in replacements ) {
if( !replacements.hasOwnProperty(find) ) continue;
str = str.replace(new RegExp(find, 'g'), replacements[find]);
}
return str;
}
var test = "Odds & ends";
var replacements = {
" ": "-", // replace space with dash
"&": "," // replace ampersand with comma
// add more pairs here
};
cleanStr = sanitize(str, replacements);
答案 4 :(得分:0)
PHP.js有一个可以解决您的问题的功能:http://phpjs.org/functions/str_replace:527