>场景客户端发出 GET 请求,响应采用如下所示的 JSON 格式
var data = {
"enabled": true,
"state": "schedule",
"schedules": [
{
"rule": {
"start": "2014-06-29T12:36:26.000",
"end": "2014-06-29T12:36:56.000",
"recurrence": [
"RRULE:FREQ=MINUTELY"
]
},
"wifi_state_during_rule": "disabled",
"end_state": "enabled"
}
],
"calculated_wifi_state_now": "disabled",
"time_of_next_state_change": [
"2014-07-08T18:56:56.000Z",
"2014-07-08T18:57:56.000Z"
]
};
出于此示例的目的,我将结果存储在名为"data"的变量中。我的正则表达式是:
checkPattern = /"w+"(?=:)/ //all keys "keyname": ...
这里的基本思想只是为了获取键名,除了在对象或数组内部......由于 JSON 中键名的定义是"键名":这就是我尝试使用上述正则表达式的原因。
我什至想过使用递归函数执行此操作,但不起作用。
永远不应该使用正则表达式解析非正则结构。
只需从解析的 json 对象中收集您想要的内容即可。
只需运行data = JSON.parse(json_string)
即可解析它
function getKeysRecursive(obj) {
var result = [];
for (var key in obj) {
result.push(key);
if (typeof obj[key] == 'object') {
result = result.concat(getKeysRecursive(obj[key]));
}
}
return result;
}
getKeysRecursive(({
"enabled": true,
"state": "schedule",
"schedules": [
{
"rule": {
"start": "2014-06-29T12:36:26.000",
"end": "2014-06-29T12:36:56.000",
"recurrence": [
"RRULE:FREQ=MINUTELY"
]
},
"wifi_state_during_rule": "disabled",
"end_state": "enabled"
}
],
"calculated_wifi_state_now": "disabled",
"time_of_next_state_change": [
"2014-07-08T18:56:56.000Z",
"2014-07-08T18:57:56.000Z"
]
}))
// ["enabled", "state", "schedules", "0", "rule", "start", "end", "recurrence", "0", "wifi_state_during_rule", "end_state", "calculated_wifi_state_now", "time_of_next_state_change", "0", "1"]
您可以过滤它们,排序,排除数字键...应有尽有。
你不需要正则表达式。Javascript有一个内置的函数来提取对象键名。
例:
使用 Object.keys();
var data = {
"enabled": true,
"state": "schedule",
"schedules": [
{
"rule": {
"start": "2014-06-29T12:36:26.000",
"end": "2014-06-29T12:36:56.000",
"recurrence": [
"RRULE:FREQ=MINUTELY"
]
},
"wifi_state_during_rule": "disabled",
"end_state": "enabled"
}
],
"calculated_wifi_state_now": "disabled",
"time_of_next_state_change": [
"2014-07-08T18:56:56.000Z",
"2014-07-08T18:57:56.000Z"
]
};
然后
console.log(Object.keys(data));
应该打印
["enabled","state","schedules","calculated_wifi_state_now","time_of_next_state_change"]
证明:http://codepen.io/theConstructor/pen/zBpWak
现在,所有的对象键都存储在一个数组中。
希望这有帮助
这将为您提供匹配的所有keys
:
"(w+)(?:":)
https://regex101.com/r/iM9wB3/2
经过编辑以在一行上处理多个keys
。