You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将纯文本转换为JavaScript模板literal实现邮件变量批量替换

方案1:正则替换(最推荐,安全易实现)

直接用正则匹配所有${变量名}格式的占位符,再从csv读取的对象里取对应值替换即可,完全不需要转模板字面量,性能和安全性都更高。
示例代码:

// 从csv读取的单条用户数据示例
const userData = { name: 'John', email: 'john@example.com' };
// 从txt文件读取的原始模板内容
const template = "Hello ${name}, how are you ${name}";

// 替换核心逻辑
const renderedContent = template.replace(/\${(\w+)}/g, (match, key) => {
  // 找不到对应变量时默认返回原占位符,也可自定义默认值
  return userData[key] ?? match;
});

console.log(renderedContent); // 输出:Hello John, how are you John

如果变量名支持下划线、连字符等特殊符号,把正则中的\w+调整为[\w-]+即可适配。

方案2:转模板字面量(不推荐,存在代码注入风险)

仅在模板内容完全可控、无外部用户输入的场景下可以使用,推荐用Function构造函数实现,不要用eval:

const userData = { name: 'John' };
const template = "Hello ${name}, how are you ${name}";

const renderTemplate = new Function(...Object.keys(userData), `return \`${template}\``);
const renderedContent = renderTemplate(...Object.values(userData));

注意:如果模板支持普通用户上传/编辑,绝对不要用该方案,恶意用户可在模板中插入可执行代码窃取数据或破坏程序运行

优化建议

  • 可以提前提取模板中所有占位符,和csv表头做校验,提前提示用户模板变量和csv字段不匹配的问题,避免漏替换
  • 如果需要支持多变量(比如${phone}、${company}),无需修改正则逻辑,只需往userData中添加对应属性即可正常适配

内容的提问来源于stack exchange,提问作者meerhamzadev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 13:48:03