我想要这段代码:
function renderTemplate(temp,content){
for (var i in temp){
replace = new RegExp("["+i+"]",'g');
content = content.replace(i,temp[i]);
}
return content;
}
var temp = {'status':'ok','id':150};
var content = "your status is [status], again! your status is [status], and your id is [id], yes[id]";
alert(renderTemplate(temp,content));
为我生成这个字符串:
your status is ok, again! your status is ok, and your id is 150, yes 150
相反,我得到:
your ok is [status], again! your status is [status], and your 150 is [id], yes[id]
查看放置ok
的位置....
您可以在此处运行:http://jsfiddle.net/v9vzd/
由于
答案 0 :(得分:2)
请尝试以下代码:
function renderTemplate(temp,content){
for (var i in temp){
replace = new RegExp("\\["+i+"\\]",'g');
content = content.replace(replace,temp[i]);
}
return content;
}
var temp = {'status':'ok','id':150};
var content = "your status is [status], again! your status is [status], and your id is [id], yes[id]";
alert(renderTemplate(temp,content));
您没有使用您创建的RegExp对象。方括号创建一个字符类,所以oyu必须转义方括号(在RegExp构造函数调用中,你必须转义转义反斜杠,所以它是两个反斜杠)。
答案 1 :(得分:2)
虽然阿德里安·朗的好答案应该让你顺利,但我认为你并没有采取最好的方法。在转义时编译变量的正则表达式可能很尴尬,而且性能通常较慢。
如果是我,我会利用将函数传递给replace()
:
function renderTemplate(temp, content) {
return content.replace(/\[([^[\]+)\]/g, function ($0, key) {
return temp[key];
});
}
这是有效的,因为子表达式捕获([^\]]+)
作为第二个参数传递给替换函数 - 在我们上面的函数中标记为key
- 这匹配文字{{1}之间的任何内容}和[
。