所以,我有一个带有此值的JSON文件作为数组:
"role":["ONE ROLE","ROLE TWO","ROLE WHATEVER",13123,123123]
我正在尝试使用正则表达式提取角色的所有值,以动态获取数组中的“角色”字段及其所有值。
到目前为止,使用此正则表达式,我设法从语法上提取了JSON文件中的所有数据,但是,当到达数组时,它仅提取第一个值...
\"(\w+)\"\:[\s\[]*\"([^\"|\,|\]]+)
是否可以对所有值重复此捕获组?如果我仅使用第二个捕获组([^\"|\,|\]]+)
,我将获得所有字段。
我尝试过这种方法: https://www.regular-expressions.info/captureall.html
使用推荐的\"(?<field>\w+)\"\:[\s\[]*\"!((?:[^\"|\,|\]]+)+)!
,但没有任何运气。
这里有什么想法吗?
非常感谢您!
答案 0 :(得分:0)
这并不漂亮,但是会做您想要的。
基本上,我们希望“手动”重复模式(?:"?,"?)?([^\"|\,|\]]+)?
的次数比您在“角色”数组中查找元素的次数要多,以捕捉可能的","next text
。
正则表达式:
\"(\w+)\"\:[\s+\[]*\"([^\"|\,|\]]+)(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?
在javascript中:
let regex = /\"(\w+)\"\:[\s+\[]*\"([^\"|\,|\]]+)(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?/
let json = '"role":["ONE ROLE","ROLE TWO","ROLE WHATEVER",13123,123123]';
let match = json.match(regex);
match = match.slice(2); //extract roles
match = match.filter(Boolean); //filter out undefined
console.log(match);
/*
[
"ONE ROLE",
"ROLE TWO",
"ROLE WHATEVER",
"13123",
"123123"
] */