2012-07-24 131 views
0

我一直在试图使用由另一SO-用户建议的方法:https://stackoverflow.com/a/1820837/1324861正则表达式查找字符串,并返回大括号之间一切

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

我的数据看起来是这样的:

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

所以,如果我在字符串化JSON对象搜索“足球”我想尽快回到用户整个信息。我怎样才能做到这一点?

+4

您字符串化的对象,所以您可以使用正则表达式来搜索它的东西? – Esailija 2012-07-24 15:30:22

+1

你的JSON对象是如此之大以至于它对字符串表示的搜索速度更快? – madfriend 2012-07-24 15:36:54

+0

您的JSON无效,对象会丢失属性名称。 – Bergi 2012-07-24 15:45:14

回答

1

不,它没有意义的字符串化JSON对象就可以了(颤栗)应用正则表达式,但嘿,这是你的CPU ...你可以使用这样的事情:

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

这应该抓住你要找的东西。但是...... JSON解析与正则表达式...不不不......

+0

我对这种方法并不满意,但似乎只有我可以想出来,因为我的JSON是动态的并且深度可变(又名我可能有data.cat1.subcat2.items []和data.cat2 .items []),我想搜索所有猫/子目录中的所有项目。 - 有更多高性能的想法,我可以做到这一点? – opfeffer 2012-07-24 15:47:34

+2

@opfeffer无论你的JSON是什么,它总是更容易,更快,更容易出错搜索其对象表示 – Esailija 2012-07-24 15:48:30

+0

@opfeffer你可以发布你的JSON样本吗?也许只是一些元素,有子元素和子元素? – dda 2012-07-25 02:27:51

0

类似 “{[^}] *(S | S)occer [^}] *}”

2

你可以从这个启发(没有将您的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); 
0
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); 
相关问题