用变量替换字符串的variablename的子字符串

时间:2017-02-04 18:19:16

标签: javascript string variables replace substring

我有一个名为String的变量,其中有一个名为bar的标记。var String = "Foo <Object.1>"我有一个名为Object的对象var Object = {1:"Bar",2:"More Bar",3:"Even more Bar"},现在我需要标记Object.1来替换所以我最终得到这样的东西:var String = "Foo Bar"

这里有一个问题:我可能在一个字符串中有多个(和不同的)标签,我不知道该字符串中有哪些标签和多少标签,并且对象内部可能还有数百万个变量。 / p>

寻求帮助, 卢卡

2 个答案:

答案 0 :(得分:2)

您可以使用适当的变量名称和替换对象的全局变量String#replace来访问window对象和密钥,从字符串中获取。

var string = "Foo <object.1>",
    object = { 1: "Bar", 2: "More Bar", 3: "Even more Bar" };

string = string.replace(/<([^.]+)\.([^>]+)>/, function (_, v, k) {
    return window[v][k];
});

console.log(string);

更好的方法是将替换零件存储到对象中并将零件作为键,而不使用window对象。那么对象也可以是本地的。

var string = "Foo <object.1>",
    values = { object: { 1: "Bar", 2: "More Bar", 3: "Even more Bar" } };

string = string.replace(/<([^.]+)\.([^>]+)>/, function (_, k1, k2) {
    return values[k1][k2];
});

console.log(string);

答案 1 :(得分:0)

使用String.prototype.replace()函数的解决方案:

&#13;
&#13;
var str = "Foo <Object.1> some text, <Object.2> data, <Object.3> other",
    values = {1:"Bar", 2:"More Bar", 3:"Even more Bar"};

str = str.replace(/<Object\.(\d+)>/g, function (m0, m1) {
  return (values[m1])? values[m1] : m0;  // replace if `Object` number exists as a key of predefined `values` object
});

console.log(str);
&#13;
&#13;
&#13;