2015-03-19 100 views
1

我想找到聚合()和find()之间的任何字符串。以下是我的代码。模式匹配以获得括号内的字符串

var str1 = 'aggregate([{$group:{_id:{state:"$state",city:"$city"},sum:{$sum:"$pop"}}},{$sort:{sum:1}},{$group:{_id:"$_id.state",smallestcity:{$first:"$_id.city"},smallest:{$first:"$sum"},largestcity:{$last:"$_id.city"},largest:{$last:"$sum"}}}])' 
var str2 = 'find({awards:{$elemMatch:{award:"Turing Award",year:{$gt:1980}}}}).limit(0)' 

var matchPharse = /((.*))/; 
var result = str1.match(matchPharse); 
console.log(result); 

我得到的结果总是整个字符串,而不是

[{$group:{_id:{state:"$state",city:"$city"},sum:{$sum:"$pop"}}},{$sort:{sum:1}},{$group:{_id:"$_id.state",smallestcity:{$first:"$_id.city"},smallest:{$first:"$sum"},largestcity:{$last:"$_id.city"},largest:{$last:"$sum"}}}] 

I am searching for something like this

+0

@AvinashRaj我觉得OP贴预期输出后“而不是” – bozdoz 2015-03-19 07:35:46

回答

1

尝试这种模式,而不是:

var matchPharse = /((\[.*\]))/; 
0

你只需要逃避外界括号。尝试:

var matchPharse = /\((.*)\)/; 

对于刚刚里面的内容括号使用result[1]

+0

将包括括号 – mish 2015-03-19 07:34:38

+0

查看更新@mish – bozdoz 2015-03-19 07:35:09

1
((\[.*?\])) 

你应该使用non greedy表达。

1

试试下面的正则表达式:

var matchPharse= /\((.*)\)/g; 

匹配()之间的任意序列。

这是一个DEMO

var str1 = 'aggregate([{$group:{_id:{state:"$state",city:"$city"},sum:{$sum:"$pop"}}},{$sort:{sum:1}},{$group:{_id:"$_id.state",smallestcity:{$first:"$_id.city"},smallest:{$first:"$sum"},largestcity:{$last:"$_id.city"},largest:{$last:"$sum"}}}])' 
 
var str2 = 'find({awards:{$elemMatch:{award:"Turing Award",year:{$gt:1980}}}}).limit(0)' 
 
var matchPharse = /\((.*)\)/; 
 
var result = str1.match(matchPharse); 
 
alert(result);

+0

请纠正我,如果我做错了什么在下面分裂。 Im split split on, var str ='{“a”:2000,“b”:“sam”},{“c”:1,“d”:1}' var res = str.split(/( ?:\} \,| \,\ {)/);控制台日志(res [1])//'{“c”:“#” :1,“d”:1} 期待输出 res [0] = {“a”:2000,“b”:“sam”} – user4324324 2015-03-19 12:27:47

+0

如果您使用split()}}计入分割的字符串中。 – 2015-03-19 13:35:34

相关问题