你有什麼在這裏:
var foo = {"hello[35]":100,"goodbye[45]":42};
是不 JSON,這是一個對象的字符串表示;你有什麼是一個對象文字,它創建一個實際的JavaScript對象。據我所知,通過將屬性名稱與正則表達式匹配來從對象中檢索值的唯一方法是枚舉屬性名稱並測試每個屬性名稱。你需要的正則表達式是這樣的:
/^hello(\[\d*\])?$/
...這將對陣「你好」任選隨後在方括號中的零個或多個數字。但是,你不想硬編碼「你好」因爲你還(大概)所需要的「再見」的值,所以使用功能:
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/
謝謝。 darn,我希望在那裏它是一個快速的一行事情,所以我不必搜索自己的JavaScript對象字面量 – ejang 2011-12-25 18:32:54
一旦你有一個對象沒有一行 - 這就是爲什麼我會寫它作爲一個函數。但是,你是通過解析JSON字符串來創建對象嗎?如果是這樣,你可以做一次性的查找/替換_before_解析它以刪除方括號中的位。 – nnnnnn 2011-12-25 23:10:08