JavaScript替换所有奇怪的行为

时间:2011-08-23 09:28:17

标签: javascript replace

我想要这段代码:

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/

由于

2 个答案:

答案 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];
    });
}
  

工作演示:http://jsfiddle.net/AKsHb/

这是有效的,因为子表达式捕获([^\]]+)作为第二个参数传递给替换函数 - 在我们上面的函数中标记为key - 这匹配文字{{1}之间的任何内容}和[