Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can you retrieve multiple regex matches in JavaScript?

I have the following regular expression in JavaScript which matches strings like "12:23:34:45" and "12:23"

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

The problem I have is that when I look at the match data there are only ever 3 matches returned. e.g. for 12:23:34:45 the matches returned are:

12:23:34:45
34:
45

i.e. the first capturing group only reports its last value. I would like the matches to be:

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

Is this possible?

like image 456
Dan Avatar asked Jul 04 '11 11:07

Dan


1 Answers

No, this is not possible in JavaScript (and most other regex flavors except Perl 6 and .NET). Repeated capturing groups always store the last value that was matched. Only .NET and Perl allow you to access those matches individually (match.Groups(i).Captures in .NET, for example).

You need two passes, the first to find the strings, the second to iterate over the matches and scan those for their sub-values.

Or make the regex explicit:

/^([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{1,2}:)?([0-9]{0,2})?$/
like image 127
Tim Pietzcker Avatar answered Nov 03 '22 01:11

Tim Pietzcker