我的代码仅替换第一个匹配项,忽略标志(全局和多行)。我做错了什么?
for (var i = 0; i < values.length; i++) {
template = template.replace('{' + i + '}', values[i].toString().trim(), 'gm');
}
如您所见,我的占位符采用以下格式:{0}、{1} 等
最佳答案
According to MDN ,这些标志对于正常的 .replace()
方法来说是非标准的。相反,您可以传入具有相同结果的 RegExp。
template.replace(new RegExp('\\{' + i + '\\}', 'gm'),
values[i].toString().trim());
由于大括号在正则表达式中具有特殊意义,因此必须对它们进行转义。
关于Javascript 字符串替换为动态创建的模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17602337/