2009-07-29 92 views
0

我有我的問題的解決方案,但我試圖讓正則表達式更好,特別是在JavaScript中。我只是想把它帶給社區,看看我能否以更好的方式寫出這些內容。正則表達式只抓取日期

因此,我得到一個來自.net的日期時間字符串,我需要從中提取日期。

目前我有什麼是:

var time = "2009-07-05T00:00:00.0000000-05:00".match(/(^\d{4}).(\d{2}).(\d{2})/i); 

正如我所說的,這工作,但我希望,使其更直接,只搶了年,月,日在數組中。我得到的結果是4個結果,第一個是YYYY-MM-DD,YYYY,MM,DD。

本質上,我只是想返回3個結果,不是太多,這不起作用(因爲我可以忽略數組中的第一個索引),但這樣我可以學習使用正則表達式更好一點。

回答

2

無論何時,如果在正則表達式中有括號,那麼匹配那些括號的值也會被返回。

  • time[0]就是整個表達式
  • time[1]是匹配什麼匹配([\ d] {4}),即年
  • time[2]是什麼第一([\ d]匹配{2} ),即每月
  • time[3]就是第二([\ d]匹配{2}),即日期

你不能改變這種行爲,以去除time[0],你不要再盟友想(因爲底層代碼已經生成它,刪除它不會帶來任何性能優勢)。

如果您不關心從括號表達式獲取值,可以使用(?:expression)使其不匹配。

+0

就像我說過的,我並不關心它,因爲我只是用它作爲學習案例,只是想看看它是否可能(理論問題而非實際問題)。 – MacAnthony 2009-07-29 14:53:25

0

我不認爲你可以這樣做,但你可以做

var myregexp = /(^\d{4})-(\d{2})-(\d{2})/g; 
var match = myregexp.exec(subject); 
while (match != null) { 
    for (var i = 1; i < match.length; i++) { 
     // matched text: match[i] 
    } 
    match = myregexp.exec(subject); 
} 

然後就是從索引中環1數組中的第一項匹配,然後組是兒童那匹配