如何使用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
相关产品推荐
相关产品推荐

