我只想根据模式替换字符串中的所有参数:
例如:
var myString = "Hello Mr.{param1}, today is {param2} and hope ...";
我不知道如何找到{#}
模式并用JavaScript中的值替换。
答案 0 :(得分:2)
function replace(str, params) {
for(var i in params)
if(params.hasOwnProperty(i))
str = str.replace('{'+i+'}', params[i]);
return str;
}
replace("Hello Mr.{param1}, today is {param2} and hope ...", {
param1: 'foo',
param2: 'bar'
}); // "Hello Mr.foo, today is bar and hope ..."
请注意,只会替换每个参数的第一次出现。
如果要替换所有匹配项,请在replace
中使用
str = str.replace(
new RegExp(
('{'+i+'}').replace(/[.^$*+?()[{\|]/g, '\\$&'),
'g'
),
params[i]
);
答案 1 :(得分:2)
将format()
函数添加到String
原型中,如下所示:
String.prototype.format = function() {
var s = this;
for (var i = 0; i < arguments.length; i++) {
var reg = new RegExp("\\{" + i + "\\}", "gm");
s = s.replace(reg, arguments[i]);
}
return s;
};
然后你可以在任何字符串上调用format()
:
var myString = 'Hello Mr. {0}, today is {1} and hope ...';
var formattedString = myString.format('John Doe', 'April, 19, 2014');
formattedString
将是:Hello Mr. John Doe, today is April, 19, 2014 and hope ...
答案 2 :(得分:1)
您可以将{regex与replace
一起使用,简单如下:
function format(str, obj) {
var re = /\{(.+?)\}/g;
return str.replace(re, function(_,m){return obj[m]});
}
并使用它:
format('Hello, my name is {name}, I am {age} years old', {
name: 'Peter',
age: '30'
});
//^ Hello, my name is Peter, I am 30 years old.