2017-02-04 29 views
1

У меня есть переменная, называемая String, в которой есть тег в названной строке. var String = "Foo <Object.1>" и у меня есть объект с именем Object, var Object = {1:"Bar",2:"More Bar",3:"Even more Bar"}, и теперь мне нужно тег Object.1, чтобы заменить, так что я в конечном итоге с чем-то вроде этого: var String = "Foo Bar"Замена подстроки переменной имени переменной с переменной

Вот улов: я мог бы иметь несколько (и разные) теги в одной строке, и я никогда не знаю, какие и сколько тегов у меня есть в этой строке, а также могут быть миллионы переменных внутри объекта.

призывает к помощи, Luca

+0

Я довольно уверен, что 'Object' уже используется для родового объекта, я думаю, вы должны переименуйте переменную. – monnef

+0

Как 'String' наверняка :) – CharlieBrown

ответ

2

Вы могли бы использовать, с соответствующими именами переменных и глобальной переменной для объекта Replacment, 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);

0

Решение с использованием String.prototype.replace() функции:

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);