2015-02-07 132 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- 
     } 
    }); 

這裏是我的解決方案, 有點小,我希望避免田地,他們只是愛無限循環自己

相關問題