簡體   English   中英

javascript通過使用正則表達式匹配鍵來從JSON對象檢索值

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM