【发布时间】:2010-05-22 04:51:52
【问题描述】:
考虑这个javascript:
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 {location.city}, {location.state}
但我想输出以下内容:
Joe Smith is currently in Los Angeles, California
我正在寻找一种将字符串中大括号之间的多级点表示法转换为与括号表示法一起使用的多个参数的好方法,如下所示:
values[first][second][third][etc]
本质上,对于这个例子,我试图找出我需要什么正则表达式字符串和函数,最终得到相当于:
out = values[name] + " is currently in " + values["location"]["city"] +
values["location"]["state"];
注意:我不想使用eval()。
【问题讨论】:
-
刚注意到一个错字。将
var joe重命名为var values -
另一个类似的问题有@J-P 对这里的答案的替代解决方案。它看起来相当优雅:stackoverflow.com/questions/3344392/…
标签: javascript regex