2016-10-20 92 views
2

我有以下的輸入字符串:JavaScript的正則表達式 - 不能得到正確的模式

02:00:00_03:00:[email protected] 

或本:

02:00:00_03:00:[email protected] 

我想寫一個javascript正則表達式將匹配兩者。 「mtwrf」是可選的...它可能會或可能不會出現在輸入中。

我一直在使用這個網站來測試: http://www.regexpal.com/

這種模式:

(\d\d\:\d\d:\d\d\_){2}([mtwrfsn\_]*)([\w\d]+\@?[\w\d\.]+) 

似乎使用輸入字符串按照regexpal.com網站的工作:

02:00:00_03:00:[email protected] 

但是,當我將它插入我的代碼時...它不匹配/找到「02:00:00」。

這裏是我的javascript代碼:

 var pattern = /(\d\d\:\d\d:\d\d\_){2}([mtwrfsn\_]*)([\w\d]+\@?[\w\d\.]+)/; 
      if (rules_array[i].length > 0) { 
        searchval = rules_array[i].match(pattern); 
      } 
      console.log(searchval); 

和輸出我得到的是這樣的:

[ '02:00:00_03:00:[email protected]', 
    '03:00:00_', 
    '', 
    '[email protected]', 
    index: 0, 
    input: '02:00:00_03:00:[email protected]' ] 

我想我應該會看到這樣的事情,而不是:

[ '02:00:00_03:00:[email protected]', 
    '02:00:00_', 
    '03:00:00_', 
    '[email protected]', 
    index: 0, 
    input: '02:00:00_03:00:[email protected]' ] 

能你看到我的錯誤/問題在哪裏? 謝謝。

+1

當使用重複捕獲組時,每次組匹配時,捕獲的該組內容將被替換。 –

+0

我推薦[regexr.com](http://regexr.com/):'((\ d {2}:){2} \ d {2} _){2}。* @。*。com' –

+0

@SebastianProske哦......那麼你的意思是我應該擺脫對我的模式中的「{2}」之類的引用? – Happydevdays

回答

0

您遇到的問題與重複捕獲組有關,請參閱How to capture an arbitrary number of groups in JavaScript Regexp?

然而,對於你的情況下,解決方案是隻拼寫出捕獲組用於所述第二時間值:

var pattern = /(\d\d\:\d\d:\d\d_)(\d\d\:\d\d:\d\d_)([mtwrfsn_]*)(\w+?[\w.]+)/; 
 
var searchval = "02:00:00_03:00:[email protected]".match(pattern); 
 
console.log(searchval);

得到

[ 
    "02:00:00_03:00:00_mtw_1234", 
    "02:00:00_", 
    "03:00:00_", 
    "mtw_", 
    "1234" 
] 

該圖案可以是進一步縮短,只需注意[\w\d] = \w\w matc hes數字以及\d