我有一个JSON字符串,需要找到一个嵌套对象,只希望返回匹配我的regexp的对象。
{
"some": {
"nested": {
"stuff": [
{
"bla": "blub1",
"bar": "bar"
},
{
"bla": "blub2",
"bar": "foo"
},
{
"bla": "blub3",
"bar": "foobar"
}
]
}
}
我几乎得到了这个reg exp /{(.*?"bar": "foo".*?)}/gs
,但这不会返回匹配的对象。
我只想让它归还:
{
"bla": "blub2",
"bar": "foo"
}
请参阅:https://regex101.com/r/mK3oI6/3
我实际上不想使用正则表达式,但我正在尝试找到在嵌套对象中查找对象的最佳解决方案,并认为它可能适用于正则表达式。
编辑:我想知道这不是一个好方法,但我只是想尝试看看正则表达式和解析JSON之间的性能并进行深度搜索
答案 0 :(得分:1)
如果您对使用正则表达式感到厌烦:
[^{]*?({\s+"bla[^}]*?})
基本上,在第一个{ <space> "bar
之前进行非贪婪搜索,直到第一个结束大括号为止。
编辑:如果您只想要第N个实例,[^{]*?(?:{\s+"bla[^}]*?}){N}[^{]*?({\s+"bla[^}]*?})
如果你只想要一个带条:foo:
.*{([^}]*bar.*?foo"[^}]*?)}
在REGEX中使用JSON是一个糟糕的想法。变得善变,容易破裂。最好使用一个原始的可迭代类型,使用json库加载json,然后简单地通过索引来获取所需的数据。
答案 1 :(得分:-1)
您将括号放在错误的位置,这样您就可以捕捉到所有内容,直到找到匹配为止
如果你这样做
)+
它只会返回匹配的部分(但这是一个贪婪的搜索,小心的大小)