javascript通过使用Regex匹配键从JSON对象检索值

时间:2011-12-25 09:10:43

标签: javascript regex

我有以下javascript对象文字(摘录)

var foo = {"hello[35]":100,"goodbye[45]":42};

我有以下查询:

var query = "hello"

我想调用foo [query]来获取值100,但是有一个[35]我不一定知道它的值。我确信我会得到一个独特的比赛。有没有办法输入查询是某种javascript正则表达式?即。

Regex = /hello/
foo[Regex]
100
请原谅noob问题...

6 个答案:

答案 0 :(得分:5)

你在这里有什么:

var foo = {"hello[35]":100,"goodbye[45]":42};

不是 JSON,它是对象的字符串表示形式;你有一个对象文字,它创建一个实际的JavaScript对象。据我所知,通过将属性名称与正则表达式匹配来从对象中检索值的唯一方法是枚举属性名称并测试每个属性名称。你需要的正则表达式是这样的:

/^hello(\[\d*\])?$/

...将与“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/

答案 1 :(得分:2)

不确定是否可以在没有任何插件的情况下使用正则表达式... 这可能有帮助......

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

http://jsfiddle.net/3qqSr

答案 2 :(得分:0)

我也是诺布,但我已经看到这个page之前看到它可以帮助你解决问题。它基本上解释了JSon路径。另请参阅此question

答案 3 :(得分:0)

由于您的JSON是一个字符串,您可以使用带有这种语句的正则表达式:

var foo = '{"hello[35]":100,"goodbye[45]":42}';
var result = foo.match(/"hello\[\d*\]":\d*/g);
result = result[0].split(":")[1];
alert(result);

jsfiddle

上查看

请注意,您可以在正则表达式中使用var而不是“hello”。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

function getVal(s, q){
   var r = s.match(new RegExp(q + "\\[\\d*\\]\":(\\d*)[\\,\\}]"));
   return r?r.pop():false;     
}
getVal(foo, "hello")