Javascript 使用RegExp在JSON中查找对象

Javascript 使用RegExp在JSON中查找对象,javascript,json,regex,Javascript,Json,Regex,我有一个JSON字符串,需要找到一个嵌套对象,只希望返回与我的regexp匹配的对象 { "some": { "nested": { "stuff": [ { "bla": "blub1", "bar": "bar" }, { "bla": "blub2", "bar": "foo" }, {

我有一个JSON字符串,需要找到一个嵌套对象,只希望返回与我的regexp匹配的对象

{
  "some": {
    "nested": {
       "stuff": [
         {
           "bla": "blub1",
           "bar": "bar"
         },
         {
           "bla": "blub2",
           "bar": "foo"
         },
         {
           "bla": "blub3",
           "bar": "foobar"
         }
      ]
   }
}
我几乎用这个regexp
/{(.*?):“foo.*?)}/gs
得到了它,但它不仅返回匹配的对象

我只想让它退回这个:

{
    "bla": "blub2",
    "bar": "foo"
}
见:

实际上,我不想使用正则表达式,但我正试图找到在嵌套对象中查找对象的最佳解决方案,并认为它可能适用于正则表达式


编辑:我不认为这不是一个好的方法,但我只想尝试看看正则表达式和解析JSON之间的性能,如果您在使用正则表达式时遇到了问题,请进行深入搜索:

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

基本上,执行非贪婪搜索直到第一个
{“bar
,捕获直到第一个闭合大括号

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

如果您只想要一个带有bar:foo:

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


将JSON与正则表达式一起使用是一个坏主意。它会变得易变且容易损坏。最好使用一种基本的iterable类型,使用JSON库加载JSON,然后简单地通过它建立索引以获取所需的数据。

如果您对使用正则表达式没有兴趣:

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

基本上,执行非贪婪搜索直到第一个
{“bar
,捕获直到第一个闭合大括号

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

如果您只想要一个带有bar:foo:

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


将JSON与正则表达式一起使用是个坏主意。变化无常,容易破碎。最好使用一种基本的iterable类型,使用json库加载json,然后简单地通过索引获取所需的数据。

regex确实不是处理json的工具。例如,当JSON字符串值包含
}
字符时,一个简单的实现就会中断。更健壮的实现是可能的,但不能处理所有可能的情况,通常不值得这么麻烦。也许您可以告诉我们您所处的环境,以便我们建议使用另一个更合适的工具?不要在这种情况下使用正则表达式。只需将json字符串解析为json对象,并遍历该对象即可获得所需的部分。您可以为它编写匹配函数。您到底想匹配什么?如前所述:具有属性
“bar”
、值
“foo”
regex的嵌套对象实际上不是处理json的工具。例如,当JSON字符串值包含
}
字符时,一个简单的实现就会中断。更健壮的实现是可能的,但不能处理所有可能的情况,通常不值得这么麻烦。也许您可以告诉我们您所处的环境,以便我们建议使用另一个更合适的工具?不要在这种情况下使用正则表达式。只需将json字符串解析为json对象,并遍历该对象即可获得所需的部分。您可以向其写入匹配函数。您到底要匹配什么?如前所述:具有属性
“bar”
且值
“foo”
第一个正则表达式的嵌套对象匹配所有对象,而不仅仅是带有“foor”的对象:“bar”。实际上,我不想使用正则表达式,我正在试图找到在嵌套对象中查找对象的最佳解决方案。@Heiko那么你为什么在问题的标题中加上“with regexp?”呢?因为我想尝试不同的方法,而regexp就是其中之一。第二种方法只与bar:foo匹配,我添加了第三个匹配foo:bar的单词first regex匹配所有的单词,而不仅仅是带有“foor”的单词:“bar”。实际上,我不想使用正则表达式,我正在试图找到在嵌套对象中查找对象的最佳解决方案。@Heiko那么你为什么在问题的标题中加上“with regexp?”呢?因为我想尝试不同的方法,而regexp就是其中之一。第二种方法只与bar:foo匹配,我还添加了第三个匹配foo:bar的单词