Regex 带有负前瞻的json正则表达式

Regex 带有负前瞻的json正则表达式,regex,sublimetext3,Regex,Sublimetext3,我有以下json数组: [ { "roleId": 128, "roleName": "B", "Permissions": [] }, { "roleId": 310, "roleName": "ROLE", "Permissions": [ { "permissionId": 8074, "isPermissionActive": t

我有以下json数组:

    [
    {
      "roleId": 128,
      "roleName": "B",
      "Permissions": []
    },
    {
      "roleId": 310,
      "roleName": "ROLE",
      "Permissions": [
        {
          "permissionId": 8074,
          "isPermissionActive": true
        },
        {
          "permissionId": 2271,
          "isPermissionActive": true
        },
        {
          "permissionId": 8075,
          "isPermissionActive": true
        },
        {
          "permissionId": 2275,
          "isPermissionActive": true
        }
      ]
    },
    {
      "roleId": 201,
      "roleName": "B",
      "Permissions": []
    },
    {
      "roleId": 5,
      "roleName": "B",
      "Permissions": []
    }
    ]
我需要选择具有非空权限的JSON的
roleId
。我尝试过使用消极前瞻,但似乎不起作用。

在选择
roleId
之前,我想在json上获得一个正确的匹配,所以我尝试了
\{(\s**?(?!“Permissions”):\s*\[\])*\}
,但它似乎匹配所有json,甚至是权限数组的内部json。应如何改变前瞻性以正确匹配。我目前正在Supreme text 3中进行匹配。

请尝试以下正则表达式:

(?<="roleId": )\d*(?=(?:[^{]*"Permissions": \[(?!])))

(?尝试以下正则表达式:

(?<="roleId": )\d*(?=(?:[^{]*"Permissions": \[(?!])))

(?虽然这并不能直接回答您的问题,但我想指出,使用JavaScript或多种可以轻松将JSON转换为本机类型的语言之一来处理JSON可能更为自然。或者,您可以使用JSON处理语言,如
jq

jq '
  map( select(.Permissions != []) | .roleId ) 
'

这将生成一个具有非空权限的角色ID数组。

虽然这并不能直接回答您的问题,但我想指出,使用JavaScript或可以轻松将JSON转换为本机类型的多种语言之一处理JSON可能更为自然。或者,您可以使用类似的JSON处理语言作为jq

jq '
  map( select(.Permissions != []) | .roleId ) 
'

它生成一个具有非空权限的角色ID数组。

用于检查该编号是否为“roleId”的查找。
和一个前瞻性检查“权限”是否有胡子

(?<="roleId": )\d+(?=[^\}]*?"Permissions":\s*\[\s*\{)

(?用于检查数字是否为“roleId”的查找。
和一个前瞻性检查“权限”是否有胡子

(?<="roleId": )\d+(?=[^\}]*?"Permissions":\s*\[\s*\{)
(?