2014-03-02 62 views
1

我有這樣的regex.exec()函數:正則表達式匹配似乎不工作的JavaScript

var chat = reader.result; 
var regex = /(\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g; 
var messages = []; 

var match; 
while(match = regex.exec(chat)) { 
     messages.push({ 
      date: match[1], 
      time: match[2], 
      name: match[3], 
      message: match[4] 
    }); 
} 

匹配[1]似乎是工作在幾乎所有日期:DD/MM/YYYY到DD-MM-YY

然而,當輸入是以下格式:

22-2-2014 18:37:15: Andre: Moet nog 2,5 aflevering 

它輸出一個空數組messages

我真的不知道這是來自哪裏,但我相信這是正則表達式match[1],因爲當輸入是28/02/14 00:03:03: Tom: Je gaat nu de afweging maken

它返回一個對象數組就好了。

P.s.對於感興趣的人,reader.result來自HTML5 filereader API。

編輯我已經更新了問題,並提供了由評論者發現的正則表達式中的錯誤。儘管如此,即使使用新的正則表達式,輸入仍然失敗

+2

您的日期的月份部分僅限於e數字。它如果在那裏失敗。 –

+0

此外,[這是一個很棒的網站,我喜歡](http://regexpal.com/),我建議你檢查一下這樣的事情。 – Daedalus

+0

謝謝,我嘗試了一個新的匹配[1]:(\ d \ d [\/- ] \ d {1,2} [\/- ] \ d {2,4}),但它仍然失敗在有問題的輸入上。 – user3263723

回答

1

嘗試此正則表達式(see demo link

(\d\d[\/-]\d\d?[\/-]\d{2,4}) (\d\d:\d\d:\d\d): ([^:]+): (.*) 

它匹配二者:

22-2-2014 18點37分15秒:安德烈:酩NOG 2,5- aflevering

22-12-2014 18:37:15:Andre:Moet nog 2,5 aflevering

+0

謝謝!這工作:)你能分享你如何找到d \ d嗎?工作而不是d {1,2}? – user3263723

+0

'\ d \ d?'會匹配一個數字和可選的第二個數字。 'd {1,2}?'會匹配一個或兩個數字,但是由於'?'只是可選的 – donfuxx

+0

,所以'\ d \ d?'與'd {1,2}'和'\ d相同。 \ d?'與'd {1,2}?'相同 – donfuxx

1

看起來像你的正則表達式忽略了單個數字月份的例外情況。 試試這個:

/(\d{1,2}[\/-]\d{1,2}[\/-]\d{2,4}) (\d\d:\d\d:\d\d): ([^:]+): (.*)/g 

編輯:還內置了可選的單個數字天。

+0

謝謝。它的確看起來像是這樣,我確信它是正則表達式中的一個錯誤,但不幸的是,它不是錯誤的解決方案。 – user3263723

+0

似乎工作正常,請在此嘗試:http://www.regextester.com/ – Phobos

相關問題