2015-02-07 80 views
0

即时通讯尝试查找脚本的特定类模式。 但我的正则表达式调用未能找到所有的事件。 相反,它只是返回第一个。jQuery的正则表达式只是发现第一次出现

string = "col-xs-1 col-md-middle col-lg-middle" 
s = /col(?:-(..)-|-)(?:middle|top|bottom)/g.exec(string); 
console.log(s) 

output -> ["col-md-middle", "md"] 

有没有人知道我在这里做错了什么?

回答

2

使用string.match函数。全局正则表达式的exec意味着在循环中使用,因为它仍然会检索所有匹配的子表达式。

> str.match(/col(?:-(..)-|-)(?:middle|top|bottom)/g) 
[ 'col-md-middle', 'col-lg-middle' ] 

如果你想获得匹配和捕获,然后使用下面。

> var re = /col(?:-(..)-|-)(?:middle|top|bottom)/g; 
undefined 
> var m; 
undefined 
> var a = []; 
undefined 
> while ((m = re.exec(str)) != null) { 
... a.push(m[0]) 
... a.push(m[1]) 
... } 
4 
> a 
[ 'col-md-middle', 
    'md', 
    'col-lg-middle', 
    'lg' ] 

Reference

+0

可以你可以告诉我,为什么原来的代码没有按照它应该的方式工作? – ceed 2015-02-07 16:14:25

+0

're.exec'函数仅返回第一个匹配项。但是当它在循环中使用时,它会打印所有匹配,因为循环迭代直到找不到匹配。 – 2015-02-07 16:18:50

+0

合乎逻辑,可能是因为速度的原因,仍然混淆为什么他们没有让它变得流行。无论如何thx – ceed 2015-02-07 16:21:04

0
var t = this 
     s = t.attr('class').match(/(col(-(..)-|-)(middle|top|bottom))/g).join(' ').split('-'); 
    $(s).each(function(k,v){ 
     if (k%2!==0) { 
      // here i get the string after col- 
     } 
    }); 

这里是我的解决方案, 有点小,我希望避免田地,他们只是爱无限循环自己

相关问题