javascript - 仅替换数组的最后一项

标签 javascript arrays node.js for-loop replace

我需要替换电子邮件正文的变量。如果变量的名称存在于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/

相关文章:

javascript - MVC .NET 4.5 如何在单击按钮时执行模型的方法(无需加载新页面)

javascript - HTML5 历史 pushState 链接返回

javascript - 在文字游戏中使用数组

arrays - 存储在 jsonb 中的数组的 Postgres 总和

python - 这是在一行代码中向 numpy 数组添加额外维度的最佳方法吗?

javascript - 如果没有行则隐藏表头

javascript - 有没有办法在没有 Javascript 的情况下在 div 中的第一个单词后换行?

javascript - Discord 机器人正在运行两个实例,我找不到其中一个来将其关闭

javascript - Mongoose 的行为和模式

mysql - 使用mysql2-promise和node创建多个新的Mysql数据库连接