[英]javascript retrieve value from JSON object by matching key using Regex
我有以下javascript对象文字(摘录)
var foo = {"hello[35]":100,"goodbye[45]":42};
我有以下查询:
var query = "hello"
我想调用foo [query]来获取值100,但是有一个[35]我不一定知道其值。 我肯定会得到一场独特的比赛。 有什么办法可以输入查询某种javascript正则表达式? 即
Regex = /hello/
foo[Regex]
100
请原谅新手问题...
您在这里拥有什么:
var foo = {"hello[35]":100,"goodbye[45]":42};
不是 JSON,它是对象的字符串表示形式; 您拥有的是一个对象常量,它创建了一个实际的JavaScript对象。 据我所知,通过将属性名称与正则表达式匹配来从对象检索值的唯一方法是枚举属性名称并测试每个属性名称。 您需要的正则表达式如下所示:
/^hello(\[\d*\])?$/
...将与“ hello”匹配(可选),后跟方括号中的零个或多个数字。 但是由于您还(可能)还需要“再见”值,因此您不想硬编码“ hello”,因此请使用以下函数:
function getPropertyByRegex(obj,propName) {
var re = new RegExp("^" + propName + "(\\[\\d*\\])?$"),
key;
for (key in obj)
if (re.test(key))
return obj[key];
return null; // put your default "not found" return value here
}
var foo = {"hello[35]":100,"goodbye[45]":42};
alert(getPropertyByRegex(foo, "hello")); // 100
alert(getPropertyByRegex(foo, "goodbye")); // 42
alert(getPropertyByRegex(foo, "whatever")); // null (not found)
演示: http : //jsfiddle.net/asDQm/
不知道您是否可以在不使用任何插件的情况下使用regex ...这可能已经有所帮助...
var foo = {"hello[35]":100,"goodbye[45]":42};
var query = "hello";
for(var key in foo){
if (key.indexOf(query) > -1)
document.write(foo[key]);
}
var foo = {"hello[35]":100,"goodbye[45]":42};
foo = foo.replace(/\[\d+\]/g,'');
var obj = (new Function("return "+foo))();
obj.hello -> 100
obj.goodbye -> 42
var query = 'hello';
obj[query] -> 100
function getVal(s, q){
var r = s.match(new RegExp(q + "\\[\\d*\\]\":(\\d*)[\\,\\}]"));
return r?r.pop():false;
}
getVal(foo, "hello")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.