我需要替换电子邮件正文的变量。如果变量的名称存在于variableNames
中数组,那么必须替换它。
但问题是,只有最后一个对应variableNames
的姓氏。名称被替换(在我的例子中: 'NAME4'
)。我究竟做错了什么?我该如何解决?
var variableNames = [
'NAME1',
'NAME2',
'NAME3',
'NAME4'];
var regex = '';
var key2 = '';
var position = '';
for (var key in variables) {
if (variableNames.includes(key)) {
position = variableNames.indexOf(key);
key2 = variableNames[position];
regex = new RegExp("###" + key2 + "###", "g");
template.content = template.body.replace(regex, variables[key2]);
//only replace the last one
}
}
最佳答案
您要替换的输入字符串始终为 template.body
(因此,每次迭代后,只有替换一次的原始字符串会分配给 template.content
)。
将要替换的字符串保存在变量中。
此外,由于您要在 variableNames
数组中查找 key
,并从中构建正则表达式,因此 includes
检查就足够了 - 只需将 key
传递给 new RegExp
,无需再次搜索数组来获取已有的变量:
const variableNames = [
'NAME1',
'NAME2',
'NAME3',
'NAME4'
];
let tempString = template.body;
for (const key in variables) {
if (variableNames.includes(key)) {
const regex = new RegExp("###" + key + "###", "g");
tempString = tempString.replace(regex, variables[key]);
}
}
template.content = tempString;
使用替换函数可能可以更优雅地完成此操作,但是如果不了解更多有关变量
的信息,很难说代码到底是什么样的。
关于javascript - 仅替换数组的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57554254/