Javascript正则表达式以新词替换多个词

Javascript正则表达式以新词替换多个词,javascript,jquery,regex,Javascript,Jquery,Regex,每次呈现HTML模板时,我都试图用新词替换多个词 我不需要在模板(相当大)中循环三次来查找三个不同的单词,而是将这三个单词及其替换项组合起来,只循环一次模板。(显然,下面的代码只替换最后一个单词,{id},因为它覆盖了上面的另外两个替换尝试) $.get('/templates/list item.html',函数(数据){ var模板=数据, tmp=''; $.getJSON('conf.json',函数(数据){ var项目=[], list=data.default; 用于(列表中的va

每次呈现HTML模板时,我都试图用新词替换多个词

我不需要在模板(相当大)中循环三次来查找三个不同的单词,而是将这三个单词及其替换项组合起来,只循环一次模板。(显然,下面的代码只替换最后一个单词,{id},因为它覆盖了上面的另外两个替换尝试)

$.get('/templates/list item.html',函数(数据){
var模板=数据,
tmp='';
$.getJSON('conf.json',函数(数据){
var项目=[],
list=data.default;
用于(列表中的var项){
var name=item.name,
值=列表[项目]。值,
id=列表[项目].id;
tmp=template.replace('{name}',name);
tmp=template.replace('{value}',value);
tmp=template.replace({id}',id);
项目推送(tmp);
}
$('', {
html:items.join(“”)
}).附于(“主体”);
});
});

显然,呈现模板不应该用JS来完成,但因为它只供内部使用,没有后端可用,也不需要谷歌为其编制索引,所以暂时还可以

您可以使用回调函数替换模板变量。例如,考虑:

template = "{foo} and {bar}"
data = {foo:123, bar:456}

template.replace(/{(\w+)}/g, function($0, $1) {
    return data[$1];
});
我还建议将循环替换为:

/{(\w+)}/g
的基本含义如下:

/                - start pattern
{                - match { literally
    (            - begin group 1
        \w       - a "word" character (letter+digit+underscore)
        +        - repeat once or more
    )            - end group 1
}                - match } literally
/                - end pattern
g                - match globally, i.e. all occurences

调用回调函数时,它将获得整个匹配项作为第一个参数,并将组1的值作为第二个参数。因此,当它看到
{foobar}
时,它调用
回调(“{foobar}”,“foobar”)

您可以使用回调函数替换模板变量。例如,考虑:

template = "{foo} and {bar}"
data = {foo:123, bar:456}

template.replace(/{(\w+)}/g, function($0, $1) {
    return data[$1];
});
我还建议将循环替换为:

/{(\w+)}/g
的基本含义如下:

/                - start pattern
{                - match { literally
    (            - begin group 1
        \w       - a "word" character (letter+digit+underscore)
        +        - repeat once or more
    )            - end group 1
}                - match } literally
/                - end pattern
g                - match globally, i.e. all occurences

调用回调函数时,它将获得整个匹配项作为第一个参数,并将组1的值作为第二个参数。所以当它看到
{foobar}
时,它调用
回调(“{foobar}”,“foobar”)

太棒了!你能解释一下(/{(\w+)}/g实际上做了什么吗?非常感谢!使用$.map()的好处是什么?它比in-loop更快,还是更容易阅读?
/{(\w+)}/
是一种。
map
更容易阅读并且可以避免麻烦。我理解/{(\w+)}/是一个regexp。我只是想知道它到底是做什么的。如果你不熟悉像我这样的regexp,这并不明显。@pata:我在帖子中添加了一些解释。太棒了!你介意解释一下(/{(\w+)}/g实际上做什么吗?非常感谢!使用$.map()有什么好处吗?它比in-loop更快,还是更容易阅读?
/{(\w+)}/
是一个。
map
更容易阅读并避免麻烦。我理解/{(\w+)}/是一个regexp。我只是想知道它的确切功能。如果你不熟悉像我这样的regexp,这并不明显。@pata:我在帖子中添加了一些解释。