我在给定的字符串中有两次字符串{{value}}。当我尝试替换()该值时,只替换该值的第一个实例,而不是第二个实例。上面的JSFiddle链接演示了这一点。这是“按设计工作”还是我做错了什么?有更好的选择吗?
var str = 'Spend $ {{value}} Get $ {{value}} Off';
var result = str.replace('{{value}}', '<a href="#" id="value" data-type="text" data-pk="1" data-name="Value" data-original-title="Amount" class="editable editable-click">value</a>');
答案 0 :(得分:3)
这是带有字符串参数的.replace()
的默认行为(由于某种原因)。提供带有全局标志的正则表达式,它将起作用:
str.replace(/{{value}}/g, ...);
另外,因为我正在编写一个,所以这是Python的str.format
的简单JavaScript克隆:
String.prototype.format = function() {
if (!arguments.length) {
return this;
}
var mapping;
if (typeof arguments[0] === 'object') {
mapping = arguments[0];
} else {
mapping = arguments;
}
return this.replace(/\{(.*?)\}/g, function(match, name) {
return mapping[name];
});
};
您可以像这样使用它:
str.format({value: '<a href=...'});
或者喜欢:
'{0}{1}{0}'.format(1, 2); // "121"