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

disho6za  于 2024-01-09  发布在  其他
关注(0)|答案(6)|浏览(236)

我有一个字符串“Good $timeOfTheDay$,$name$”
$timeOfTheDay$和$name$是占位符,其值包含在JSON对象中。

  1. var content = { "timeOfTheDay" : "evening",
  2. "name" : "Jack",
  3. "city" : "New York",
  4. "age" : "25",
  5. }

字符串
希望用JSON对象中的值替换字符串中的占位符。结果字符串将是:“Good evening,Jack”
我想用JavaScript来做这个。这不涉及与DOM的任何交互。
我猜蛮力的方式来做这将是通过编写JS代码来做替换,但有一个库或其他方式来做到这一点?
感谢任何想法/帮助。谢谢!

mctunoxg

mctunoxg1#

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

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

字符串
其他示例:

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

展开查看全部
k4aesqcs

k4aesqcs2#

只需使用String.prototype.replace函数

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

字符串

ff29svar

ff29svar3#

  1. var content = { "timeOfTheDay" : "evening",
  2. "name" : "Jack",
  3. "city" : "New York",
  4. "age" : "25",
  5. }
  6. document.getElementById('greeting').placeholder = 'Good ' + content.timeOfTheDay + ', ' +content.name;

个字符

kknvjkwl

kknvjkwl4#

这个库可以用来替换占位符。它也可以用来递归地替换占位符。https://github.com/tarangkhandelwal/substitutor.js
例如:
nameJson= {“first”:“John”,“last”:“Doe”}
var fullName = substitutor('我的名字是{first} {last} ',nameJson);

igetnqfo

igetnqfo5#

如果你想使用${var}转换:

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

字符串
输出

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

展开查看全部
vom3gejh

vom3gejh6#

将我的解决方案导出到一个方便的函数中,您可以使用任何字符串调用。

  1. export function getValue(text, values) {
  2. return text.replace(/\$\w+\$/g, (match) => {
  3. const variable = match.slice(1, -1);
  4. return values[variable] || match;
  5. });
  6. }

字符串

用法

  1. var content = {
  2. timeOfTheDay: "evening",
  3. name: "Jack",
  4. city: "New York",
  5. age: "25",
  6. };
  7. const jsonString = "Good $timeOfDay$ $name$ from $city$"
  8. getValue({ jsonString, {
  9. "timeOfDay": content.timeOfTheDay,
  10. "name": content.name,
  11. "city": content.city
  12. }
  13. })
  1. Result: "Good evening John from New York"

的数据

展开查看全部

相关问题