用来自JSON对象的占位符值替换字符串

Substitute string with placeholder values coming from JSON object

本文关键字:占位符 替换 字符串 对象 JSON      更新时间:2023-09-26

我有一个字符串"Good$timeOfTheDay$,$name$"

$timeOfTheDay$和$name$是占位符,它们的值包含在JSON对象中。

var content = { "timeOfTheDay" : "evening",
                "name" : "Jack",  
                "city" : "New York",  
                "age" : "25",  
              }

想要用JSON对象的值替换字符串中的占位符。结果字符串为:"晚安,Jack"

想要在javascript中完成此操作。这不涉及与DOM的任何交互。

我猜暴力的方法是通过编写JS代码来进行替换,但有库或其他方法可以做到这一点吗?

感谢任何想法/帮助。谢谢

使用String.splitString.replaceArray.mapArray.join函数的扩展解决方案:

var content = {"timeOfTheDay" : "evening", "name" : "Jack", "city" : "New York", "age" : "25"},
    str = "Good $timeOfTheDay$, $name$", replaced = "";
var parts = str.split(/('$'w+?'$)/g).map(function(v) {
    replaced = v.replace(/'$/g,"");
    return content[replaced] || replaced; 
});
console.log(parts.join(""));  // "Good evening, Jack"

附加示例:

...
str = "$name$ lives in $city$. He is $age$";
...
console.log(parts.join(""));  // "Jack lives in New York. He is 25"

只需使用String.prototype.replace函数

var content = { "timeOfTheDay": "evening", "name": "Jack", "city": "New York", "age": "25", }
var str = "Good $timeOfTheDay$, $name$"
var result = str.replace('$timeOfTheDay$', content.timeOfTheDay)
                .replace('$name$', content.name);
document.write(result);

var content = { "timeOfTheDay" : "evening",
                "name" : "Jack",  
                "city" : "New York",  
                "age" : "25",  
              }
document.getElementById('greeting').placeholder = 'Good ' + content.timeOfTheDay + ', ' +content.name;
<input id='greeting'>

此库可用于替换占位符。这也可以用来递归地替换占位符。https://github.com/tarangkhandelwal/substitutor.js

例如:

nameJson={"first":"John","last":"Doe"}

var fullName=substitator('我的名字是{first}{last}',nameJson);

如果您想使用${var}调用:

var content = {
  timeOfTheDay: 'evening',
  name: 'Jack',
  city: 'New York',
  age: '25'
};
var str = 'Good ${timeOfTheDay}, ${name}. I am from ${city}, ${age} years old';
var parts = str.split(/('$'{'w+?})/g).map(function(v) {
  var replaced = v.replace(/'$'{('w+?)}/g, '$1');
  return content[replaced] || v;
});
console.log(parts.join(''));

输出

Good evening, Jack. I am from New York, 25 years old