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

如何使用Node.js/JavaScript替换JSON对象键对应的字符串占位符

问题根因

你的原有代码没有匹配到完整的占位符结构:原字符串里的变量占位符是${xxx}格式,你只替换了xxx的键名,自然无法命中占位符。另外原字符串里的</br>是HTML实体编码的换行标签,需要转换为实际换行才能得到预期的分行输出效果。


实现方案

方案1:修改原有替换逻辑

适配占位符格式,补充换行标签转换逻辑:

const sentence = ' Name: ${fname} ${lname} </br> Email: ${email} </br> ' 

let valuesObj={
  "fname": "sant",
  "lname": "G",
  "email": "Test@test.com"
}

function replaceAll(str, map){
  for(key in map){
    // 拼接完整的占位符匹配规则,$和{}需要转义
    const placeholder = `\\\${${key}}`
    str = str.replaceAll(placeholder, map[key]);
  }
  // 替换HTML实体换行为实际换行,去除首尾多余空格
  str = str.replaceAll('</br>', '\n').trim()
  return str;
}

const newString = replaceAll(sentence, valuesObj);
console.log(newString)

方案2:正则全局匹配(更推荐)

无需循环遍历对象,一次全局匹配所有占位符,避免键名和普通文本意外冲突:

const sentence = ' Name: ${fname} ${lname} </br> Email: ${email} </br> ' 

let valuesObj={
  "fname": "sant",
  "lname": "G",
  "email": "Test@test.com"
}

const newString = sentence.replace(/\$\{(\w+)\}/g, (_, key) => valuesObj[key] ?? _)
  .replaceAll('</br>', '\n')
  .trim()

console.log(newString)

两种方案运行后的输出均符合预期:

Name: sant G
Email: Test@test.com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 19:54:03