Javascript 正则表达式,用于用新单词替换多个单词
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")
。
相关文章:
- JavaScript Regex 将单词替换为其第一个字母,除非在括号内
- 如何替换数据属性中的特定字符串单词
- 替换与单词'匹配的文本字符;购物车'替换为img图标
- Javascript/jQuery替换tamil语言输入框中的最后一个单词
- 用特定的javascript正则表达式替换每个单词
- 查找并替换多个单词 JavaScript
- 如何使用正则表达式 JavaScript 替换具有特定单词的整行
- 查找单词的一部分,但替换整个单词
- JavaScript-遍历数组并替换页面上的单词
- 我想使用replace函数扫描json对象,然后用字符串替换匹配的单词
- JavaScript无法用相同单词的数量替换字符串
- Regex,替换所有以@开头的单词
- 根据Javascript中的模式替换单词
- 使用javascript替换单词
- 如果单词末尾没有“s”,请替换单词末尾的“s”
- 当用户输入时替换单词(JS)
- 用表单(Javascript)替换单词
- 在javascript中查找并替换单词
- 根据正则表达式搜索结果替换单词
- 用JavaScript动态替换单词