2017-02-04 5 views
1

Ich habe eine Variable namens String, die ein Tag namens bar hat. var String = "Foo <Object.1>" und ich habe ein Objekt namens Object, var Object = {1:"Bar",2:"More Bar",3:"Even more Bar"}, und jetzt brauche ich das Tag Object.1 durch die so ersetzt wird ich mit etwas am Ende wie folgt: var String = "Foo Bar"Ersetzen eines Teilstrings eines Variablennamens eines Strings durch eine Variable

Hier ist der Haken: Ich könnte mehr (und verschiedene) Tags in einer Zeichenfolge, und ich weiß nie, welche und wie viele Tags ich in dieser Zeichenfolge habe, und es könnte auch Millionen von Variablen innerhalb des Objekts sein.

Hilferufe, Luca

+0

Ich bin ziemlich sicher, dass 'Object' bereits für ein generisches Objekt verwendet wird, denke ich, sollten Sie Benenne deine Variable um. – monnef

+0

Wie ist 'String' sicher :) – CharlieBrown

Antwort

2

Sie mit der richtigen Variablennamen und eine globale Variable für die replacment Objekt, String#replace mit einem Zugriff über das, aus dem String genommen window Objekt und Schlüssel verwenden könnten.

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

Ein besserer Ansatz wäre die Ersatzteile in ein Objekt zu speichern und die Teile als Schlüssel nehmen, ohne die Verwendung des window Objekt. Dann könnte das Objekt auch lokal sein.

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

Die Lösung mit String.prototype.replace() Funktion:

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

Verwandte Themen