javascript通过使用正则表达式匹配键从JSON对象检索值

javascript retrieve value from JSON object by matching key using Regex

本文关键字:JSON 对象 检索 正则表达式 javascript      更新时间:2023-09-26

我有以下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",因为你也(大概)需要"goodbye"的值,所以使用一个函数:

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]);
}
http://jsfiddle.net/3qqSr

我在这里也是新手,但我以前看过这个页面,看到它可以帮助你解决你的问题。它主要解释JSon路径。

由于JSON是字符串,因此可以使用regexp来执行以下语句:

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

在jsfiddle上观看

请注意,您可以在regexp中使用var来代替"hello"。

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