你有什么在这里:
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