如何在JavaScript中替换模板文本文档中的几个不同项

如何在JavaScript中替换模板文本文档中的几个不同项,javascript,regex,replace,Javascript,Regex,Replace,我正在尝试创建一个服务,其中在发出http请求后发送电子邮件。我在文档的文本中定义了几个变量,比如#FIRSTNAME#LASTNAME等。在一次偶发之后,我想用帖子接收到的信息(即动态的,而不是先前已知的变量)替换这些变量 我当前使用的方法涉及一个 matcha = /#FIRSTNAME/ matchb = /#LASTNAME/ 但在这两封电子邮件之后,我有一个相当长的代码字符串,看起来像: let outgoingEmail = data.replace(matcha, vara).

我正在尝试创建一个服务,其中在发出http请求后发送电子邮件。我在文档的文本中定义了几个变量,比如
#FIRSTNAME
#LASTNAME
等。在一次偶发之后,我想用帖子接收到的信息(即动态的,而不是先前已知的变量)替换这些变量

我当前使用的方法涉及一个

matcha = /#FIRSTNAME/
matchb = /#LASTNAME/
但在这两封电子邮件之后,我有一个相当长的代码字符串,看起来像:

 let outgoingEmail = data.replace(matcha, vara).replace(matchb, varb)
有没有更简洁的方法来替换多个匹配项,还是我必须将所有匹配项链接在一起


对于两个,我想这是可以接受的,但我想替换很多,我想知道像电子邮件模板服务这样的东西通常是如何处理的。

创建一个对象来存储针及其替换品。要获取对象和构造函数中的所有键,请使用或
在键中创建一个正则表达式

然后使用
String#replace
with函数将针替换为对象中的值

var replacements = {
    '#FIRSTNAME': 'Tushar',
    '#LASTNAME': 'Secret'
    ...
};

var regex = new RegExp(Object.keys(replacements).join('|'), 'g');
// Use `i` flag to match case-insensitively

data.replace(regex, function(m) {
    return replacements[m] || m;
});

注意:如果要查找的字符串包含在正则表达式中具有特殊含义的字符,则需要在从字符串创建正则表达式之前对其进行转义

如果使用
,则可以轻松创建基本模板引擎。使用回调函数替换
,并提供具有变量名的对象

简单的例子:
var数据='\n'+
'名字:#名字\n'+
'姓氏:#姓氏\n'+
“\n”;
变量替换={
名字:“约翰”,
姓:“史密斯”
};
var message=data.replace(/#([A-Z]+)/g,函数(全部,字){
返回替换[字];
});

控制台日志(消息)这看起来与几年前非常相似。这看起来很棒,但我更新了我的答案,我正在寻找一个可以使用动态变量的版本。这里的
Tushar
secret
是硬编码的。@Startec您可以在创建对象时指定值。由于您有变量,所以可以将它们用作对象中的值。我不必将
替换项
传递到
对象.keys()
?@Startec抱歉,我的错误。谢谢你纠正我。:)