2014-10-09 82 views
0

我遇到了正則表達式的問題。我正在嘗試使用相同的字符串來驗證和提取匹配字符串中的所有重複組。提取所有重複捕獲組

目標:我正在驗證和提取特定日期的時間以及默認時間。我的格式爲:{def_time}[|{day}={time}]

舉幾個例子:

  • 0時01分05秒
  • 23:50 |星期一= 23:00 |星期四= 23:00
  • 23:50 |星期一= 23:00:55 |星期四= 23:00 |孫= 23:00:10

我想出了先用這個表達式:

/^(\d{2}:\d{2}(?::\d{2})?)(\|(Mon|Tue|Wed|Thu|Fri|Sat|Sun)=(\d{2}:\d{2}(?::\d{2})?))*$/i 

它很好地驗證,提取默認時間,但只捕獲最後一個重複組。 有沒有辦法讓所有這些重複的組被捕獲?

我也試過(帶-g選項):

/(?:^|\|(Mon|Tue|Wed|Thu|Fri|Sat|Sun)=)(\d{2}:\d{2}(?::\d{2})?)/gi 

將提取所有羣體,但不驗證整個字符串相匹配。

回答

1

一個重複的捕獲組將只捕獲最後一次迭代,因爲每次發現都會覆蓋該組。所以你將不得不使用這兩個正則表達式,首先驗證然後捕獲。

+0

這就是我所害怕的。感謝您的確認。 – user3271580 2014-10-10 15:33:26