इस जावास्क्रिप्ट पर विचार करें:जावास्क्रिप्ट Regex ब्रैकेट अंकन करने के लिए डॉट नोटेशन कन्वर्ट करने के लिए
var values = {
name: "Joe Smith",
location: {
city: "Los Angeles",
state: "California"
}
}
var string = "{name} is currently in {location.city}, {location.state}";
var out = string.replace(/{([\w\.]+)}/g, function(wholematch,firstmatch) {
return typeof values[firstmatch] !== 'undefined' ?
values[firstmatch] : wholematch;
});
हो जाएगा ताकि उत्पादन निम्नलिखित:
Joe Smith is currently in Los Angeles, California
:
Joe Smith is currently in {location.city}, {location.state}
लेकिन मैं निम्नलिखित उत्पादन करना चाहते हैं
मैं स्ट्रिंग में ब्रेसिज़ के बीच कई बिंदुओं में डॉट नोटेशन के कई स्तरों को परिवर्तित करने का एक अच्छा तरीका ढूंढ रहा हूं मापदंडों ब्रैकेट अंकन के साथ इस्तेमाल किया जा रहा, इस तरह:
:values[first][second][third][etc]
मूलतः, यह उदाहरण के लिए, मैं यह पता लगाने की कोशिश कर रहा हूँ क्या regex स्ट्रिंग और समारोह मैं के बराबर के साथ खत्म करने की आवश्यकता होगी
out = values[name] + " is currently in " + values["location"]["city"] +
values["location"]["state"];
नोट: मैं eval()
का उपयोग किए बिना ऐसा करना चाहता हूं।
बस एक टाइपो देखा है। 'Var joe' से 'var values' को नामित किया गया – Tauren
एक और समान प्रश्न के उत्तर में @ जे-पी द्वारा वैकल्पिक समाधान है। यह काफी सुरुचिपूर्ण दिखता है: http://stackoverflow.com/questions/3344392/dynamic-deep-selection-for-a-javascript-object/3344487#3344487 – Tauren