正则表达式匹配字符串但不在模式中

时间:2015-10-08 18:48:06

标签: json regex pattern-matching

我有以下JSON,我希望在文件JSON Array之外找到id值(在本例中为1234)。在这种情况下,正则表达式会是什么?

{ 
  "id":"abc1234",
  "name":"test",
  "files":[
    { 
      "id":"abc1",
      "name":"test1"
    },
    { 
      "id":"abc2",
      "name":"test2"
    }
  ]
}

请注意,JSON字段的保证顺序不正确,因此外部id字段可能位于文件JSON数组之后。

以下捕获它的第一个实例,但我需要以某种方式否定文件JSON数组中的匹配。

\b(?:id":")(\w+)\b

2 个答案:

答案 0 :(得分:0)

不会使用正则表达式来解决您的问题,而是使用JSON解析器。

但是,如果你想使用正则表达式,你可以使用这样的东西:

id":"(\d+).*files|files.*id":"(\d+)

<强> Working demo

enter image description here

答案 1 :(得分:0)

我认为正则表达式在解析JSON时并不是一个好的选择,并且很多时候都在解释为什么它不是一个好主意,但最终它取决于你将使用什么,所以如果为了一些神秘如果你决定使用正则表达式,你可以试试:

(\s*)\{\s\n(?=(\s+))[\s\S]*?^\2"id":"(?<ID>\d+)"[\s\S]*?^\1\}

DEMO

它匹配整个部分,但您将在ID组中获得所需的值。