2017-02-04 18 views
1

barというタグを持つStringという変数があります。 var String = "Foo <Object.1>"と私は、オブジェクト、var Object = {1:"Bar",2:"More Bar",3:"Even more Bar"}と呼ばれるオブジェクトを持っている、そして今私は、タグObject.1ので、私はこのようなものに終わるに置き換えを取得する必要があります。ここではvar String = "Foo Bar"文字列の可変文字列の部分文字列を変数に置き換える

はキャッチです:私は複数を持っているかもしれません(と異なる)タグを1つの文字列に含むことができます。また、その文字列に含まれるタグの数と数、そしてオブジェクトの内部に何百万もの変数が存在する可能性があります。あなたは適切な変数名と文字列から取らreplacmentのオブジェクトのグローバル変数、windowオブジェクトとキー以上のアクセス権を持つString#replace、で、使用することができます助けを

コール、 ルカ

+0

を私は 'Object'はすでに一般的なオブジェクトのために使用されているかなり確信して、私はあなたがすべきだと思います変数の名前を変更します。 – monnef

+0

「文字列」は確かにそうです:) – CharlieBrown

答えて

2

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

関連する問題