提取所有重复捕获组

时间:2014-10-09 21:40:20

标签: regex validation match extraction regex-group

我遇到了正则表达式的麻烦。我正在尝试用同一个来验证并从匹配的字符串中提取所有重复的组。

目标:我希望验证并提取特定日期和默认时间的时间。我的格式为:{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 :(得分:1)

重复捕获组将仅捕获最后一次迭代,因为它会覆盖每个发现的组。所以你必须使用这两个正则表达式,首先验证然后捕获。