我在JavaScript中有以下正则表达式,它匹配"12:23:34:45"和"12:23"之类的字符串
/^([0-9]{1,2}\:){0,3}([0-9]{0,2})?$/
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我查看匹配数据时,只返回3个匹配项.例如,对于12:23:34:45,返回的比赛是:
12:23:34:45
34:
45
Run Code Online (Sandbox Code Playgroud)
即第一个捕获组仅报告其最后一个值.我希望比赛是:
12:23:34:45
12:
23:
34:
45
Run Code Online (Sandbox Code Playgroud)
这可能吗?
Tim*_*ker 11
不,这在JavaScript(以及除Perl 6和.NET之外的大多数其他正则表达式)中是不可能的.重复捕获组始终存储匹配的最后一个值.只有.NET和Perl允许您单独访问这些匹配项(match.Groups(i).Captures
例如,在.NET中).
您需要两个传递,第一个用于查找字符串,第二个用于迭代匹配并扫描它们的子值.
或者使正则表达式显式:
/^([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{0,2})?$/
Run Code Online (Sandbox Code Playgroud)