Regex 带有负前瞻的json正则表达式
我有以下json数组:Regex 带有负前瞻的json正则表达式,regex,sublimetext3,Regex,Sublimetext3,我有以下json数组: [ { "roleId": 128, "roleName": "B", "Permissions": [] }, { "roleId": 310, "roleName": "ROLE", "Permissions": [ { "permissionId": 8074, "isPermissionActive": t
[
{
"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*\{)
(?