2013-07-10 38 views
1

我有一个正则表达式的Javascript正则表达式捕获 - 所有可能的组合

\|\|(\d+)(?=\|\|(?:(?!\|\|\d+\|\|)[\s\S])*jambura) 

Working Sample
是否有人可以帮助我找到所有可能的组合中使用正则表达式

详情: 当前的正则表达式是能够捕获WIDEST MATCHES(在给定的页面内),但它无法捕获嵌入/子串模式 例如:正则表达式能够捕获|| 1 ||对于

||1||  
Jam Jam jambura jadu tu sikh jambura 

,但它是无法捕捉到它的

||1||  
Jam Jam jambura 

基本上我想写这应该能够找到上发生给定单词页码的模式。所以如果在页面|| 1 ||上出现两次“jambura”这个词,我应该能够捕获2个匹配。

任何帮助将不胜感激。

+0

在JavaScript中最实用的解决方案是匹配整个页面(更改'(? = ...)'到'...',移除'jambura'),然后在结果中匹配'jambura'。 –

回答

0

这对我的作品

var str='||1|| Jam Jam jambura jadu tu sikh jambura'; 
reg = /(?!\|\|(\d+)\|\||jambura).+?jambura/g; 
re = /(?![\|]+)\d+(?=[\|]+)/ 
alert('page '+str.match(re)+': '+str.match(reg).length+' matches'); 

Try Fiddle

的想法是一致\|\|\d+\|\|第一,那么只有jumbara。其实,我花了半个晚上找到一个解决方案,所以我不记得为什么我开始在这里使用?!,但它的工作原理

+0

我真的很感谢你所付出的努力,但你提出的解决方案并不是我正在寻找的。我只想要一个正则表达式模式,它应该能够返回“n”个匹配,每个匹配词的识别。例如,如果jambura发生2次我应该可以得到str.match(reg)[0] = 1和str.match(reg)[1] = 1 –

+0

@SuyogBarve有什么问题? 'str.match(reg).length'返回匹配的数量,你不需要一个用'1'填充的数组 – vladkras