[英]Javascript regex to replace multiple words with new words
每次渲染HTML模板时,我都试图用新单词替换多个单词。
无需三遍遍模板(这是很大的)来查找三个不同的单词,我想将这三个单词及其替换组合起来 ,只遍历一次模板。 (此外,显然,下面的代码仅替换了最后一个单词{id},因为它会覆盖上面的其他两个替换尝试)。
$.get('/templates/list-item.html', function(data) {
var template = data,
tmp = '';
$.getJSON('conf.json', function(data) {
var items = [],
list = data.default;
for (var item in list) {
var name = item.name,
value = list[item].value,
id = list[item].id;
tmp = template.replace('{name}', name);
tmp = template.replace('{value}', value);
tmp = template.replace('{id}', id);
items.push(tmp);
}
$('<div/>', {
html: items.join('')
}).appendTo('body');
});
});
显然,渲染模板不应该使用JS完成,但是由于它仅供内部使用,因此没有可用的后端,并且不需要Google对其进行索引,暂时还可以。
您可以使用回调函数来替换模板变量。 考虑例如:
template = "{foo} and {bar}"
data = {foo:123, bar:456}
template.replace(/{(\w+)}/g, function($0, $1) {
return data[$1];
});
我也建议用map()代替循环:
items = $.map(list, function(item) {
var data = {name: item.name, value:.... etc }
return 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}
,它将调用callback("{foobar}", "foobar")
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.