你能在JavaScript中检索多个正则表达式匹配吗?

时间:2011-07-04 11:53:52

标签: javascript regex

我在JavaScript中有以下正则表达式,匹配“12:23:34:45”和“12:23”之类的字符串

/^([0-9]{1,2}\:){0,3}([0-9]{0,2})?$/

我遇到的问题是,当我查看匹配数据时,只返回3个匹配项。例如对于12:23:34:45比赛返回的是:

12:23:34:45
34:
45

即。第一个捕获组仅报告其最后一个值。我希望比赛是:

12:23:34:45
12:
23:
34:
45

这可能吗?

1 个答案:

答案 0 :(得分:11)

不,这在JavaScript(以及除Perl 6和.NET之外的大多数其他正则表达式)中是不可能的。重复捕获组始终存储匹配的最后一个值。只有.NET和Perl允许您单独访问这些匹配项(例如,在.NET中为match.Groups(i).Captures)。

你需要两次传递,第一次是查找字符串,第二次是遍历匹配并扫描它们的子值。

或者使正则表达式明确:

/^([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{0,2})?$/