【问题标题】:Regular Expression look for string and return everything between curly braces正则表达式查找字符串并返回大括号之间的所有内容
【发布时间】:2012-07-22 23:09:33
【问题描述】:

我一直在尝试使用另一个 SO-User 建议的方法:https://stackoverflow.com/a/1820837/1324861

但没有运气。基本上,我有一个大型 JSON 对象,我使用 JSON.stringify() 将其转换为字符串,以便对其执行正则表达式模式。我的想法是返回 { } 之间的所有内容,如果在大括号之间的任何位置找到我的搜索词“足球”。

我的数据可能如下所示:

{
  {
    User: "Peter",
    Hobbies: "Soccer, Football, ...",
    more...
  },
  {
    User: "Simon",
    Hobbies: "Pingpong, Soccer, Badminton",
    more...
  }
}

因此,如果我在字符串化的 JSON 对象中搜索“足球”,我想取回用户的全部信息。我该怎么做?

【问题讨论】:

  • 您对一个对象进行了字符串化,以便可以使用正则表达式搜索其中的内容?
  • 您的 JSON 对象是否如此之大以至于搜索它的字符串表示形式会更快?
  • 您的 JSON 无效,对象缺少属性名称。
  • @madfriend 嗯,那会更慢。

标签: javascript regex curly-braces


【解决方案1】:

您可以从中获得启发(无需将您的 json 转换为字符串):

var myData = [
  {
    User: "Peter",
    Hobbies: "Soccer, Football, ..."
  },
  {
    User: "Simon",
    Hobbies: "Pingpong, Soccer, Badminton"
  }
];
var results = "";
for (var i = 0; i < myData.length; i++) {
    if (myData[i]["Hobbies"].indexOf("Soccer") != -1) {
        results += JSON.stringify(myData [i]) + "\n";
    }                  
}
alert(results);

【讨论】:

    【解决方案2】:

    并不是说对 JSON 对象进行字符串化以在其上应用正则表达式是没有意义的(不寒而栗),但是嘿,这是你的 CPU……你可以使用这样的东西:

    \{[^{]+soccer[^}]+}
    

    这应该可以捕获您要查找的内容。但是...使用正则表达式解析 JSON...Nononono...

    【讨论】:

    • 我对这种方法也不是很满意,但它似乎是我能想到的唯一一种方法,因为我的 JSON 是动态的并且深度可变(也就是我可能有 data.cat1.subcat2. items[] 和 data.cat2.items[]) 我想搜索所有猫/子猫中的所有项目。 - 有更高效的想法,我该如何实现?
    • @opfeffer 不管你的 JSON 是什么,搜索它的对象表示总是更容易、更快、更不容易出错
    • @opfeffer 你能发布你的 JSON 样本吗?也许只是几个元素,带有子元素和子子元素?
    【解决方案3】:

    类似“{[^}]*(S|s)occer[^}]*}”的东西

    【讨论】:

      【解决方案4】:
      var json = [
        {
          User: "Peter",
          Hobbies: "Soccer, Football, ..."
        },
        {
          User: "Simon",
          Hobbies: "Pingpong, Badminton"
        }
      ];
      
      
      var jsonString = JSON.stringify(json);
      var regEx = /(\{.*?Soccer.*?\})/;
      var user = jsonString.match(regEx)[1];
      document.write(user);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-02
        • 1970-01-01
        • 2019-06-20
        • 1970-01-01
        • 1970-01-01
        • 2016-02-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多