与同一组中的多个值匹配的正则表达式

时间:2019-05-23 11:38:50

标签: regex regex-group

所以,我有一个带有此值的JSON文件作为数组:

"role":["ONE ROLE","ROLE TWO","ROLE WHATEVER",13123,123123]

我正在尝试使用正则表达式提取角色的所有值,以动态获取数组中的“角色”字段及其所有值。

到目前为止,使用此正则表达式,我设法从语法上提取了JSON文件中的所有数据,但是,当到达数组时,它仅提取第一个值...

\"(\w+)\"\:[\s\[]*\"([^\"|\,|\]]+)

是否可以对所有值重复此捕获组?如果我仅使用第二个捕获组([^\"|\,|\]]+),我将获得所有字段。

我尝试过这种方法: https://www.regular-expressions.info/captureall.html

使用推荐的\"(?<field>\w+)\"\:[\s\[]*\"!((?:[^\"|\,|\]]+)+)!,但没有任何运气。

这里有什么想法吗?

非常感谢您!

1 个答案:

答案 0 :(得分:0)

这并不漂亮,但是会做您想要的。

基本上,我们希望“手动”重复模式(?:"?,"?)?([^\"|\,|\]]+)?的次数比您在“角色”数组中查找元素的次数要多,以捕捉可能的","next text

正则表达式:

\"(\w+)\"\:[\s+\[]*\"([^\"|\,|\]]+)(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?(?:"?,"?)?([^\"|\,|\]]+)?

Regex Demo

在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"
] */