使用占位符和替换对象格式化JavaScript字符串?

我有一个字符串,上面写着:My Name is %NAME% and my age is %AGE%.

%XXX%是占位符。我们需要从对象替换那里的值。

对象如下所示:{"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"}

我需要解析对象并将字符串替换为相应的值。因此,最终输出将为:

我的名字是迈克,我的年龄是26岁。

整个事情必须使用纯javascript或jquery来完成。


答案 1

原始问题的要求显然无法从字符串插值中受益,因为它似乎是任意替换键的运行时处理。

但是,如果您只需要执行字符串插值,则可以使用:

const str = `My name is ${replacements.name} and my age is ${replacements.age}.`

请注意分隔字符串的反引号,它们是必需的。


对于适合特定OP要求的答案,您可以使用替代。String.prototype.replace()

以下代码将处理所有匹配项,而不是在没有替换项的情况下触摸匹配项(只要替换值都是字符串,如果不是,请参阅下文)。

var replacements = {"%NAME%":"Mike","%AGE%":"26","%EVENT%":"20"},
    str = 'My Name is %NAME% and my age is %AGE%.';

str = str.replace(/%\w+%/g, function(all) {
   return replacements[all] || all;
});

jsFiddle.

如果某些替换项不是字符串,请确保它们首先存在于对象中。如果您有类似示例的格式,即用百分符号包装,则可以使用运算符来实现此目的。in

jsFiddle.

但是,如果您的格式没有特殊格式,即任何字符串,并且您的替换对象没有原型,请使用 ,除非您可以保证没有潜在的替换子字符串会与原型上的属性名称发生冲突。nullObject.prototype.hasOwnProperty()

jsFiddle.

否则,如果你的替换字符串是 ,你会得到一个结果混乱的字符串。'hasOwnProperty'

jsFiddle.


作为旁注,您应该被称为 ,而不是 .replacementsObjectArray


答案 2

使用 ES6 模板文本怎么样?

var a = "cat";
var b = "fat";
console.log(`my ${a} is ${b}`); //notice back-ticked string

有关模板文本的更多信息...