使用RegExp在JSON中查找对象

时间:2016-08-24 11:19:23

标签: javascript json regex

我有一个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之间的性能并进行深度搜索

2 个答案:

答案 0 :(得分:1)

如果您对使用正则表达式感到厌烦:

[^{]*?({\s+"bla[^}]*?})

基本上,在第一个{ <space> "bar之前进行非贪婪搜索,直到第一个结束大括号为止。

编辑:如果您只想要第N个实例,[^{]*?(?:{\s+"bla[^}]*?}){N}[^{]*?({\s+"bla[^}]*?})

如果你只想要一个带条:foo:

.*{([^}]*bar.*?foo"[^}]*?)}

在REGEX中使用JSON是一个糟糕的想法。变得善变,容易破裂。最好使用一个原始的可迭代类型,使用json库加载json,然后简单地通过索引来获取所需的数据。

答案 1 :(得分:-1)

您将括号放在错误的位置,这样您就可以捕捉到所有内容,直到找到匹配为止

如果你这样做 )+

它只会返回匹配的部分(但这是一个贪婪的搜索,小心的大小)