I’m having a tough time getting this to work. I have a string like:
something/([0-9])/([a-z])
And I need regex or a method of getting each match between the parentheses and return an array of matches like:
[ [0-9], [a-z] ]
The regex I’m using is /((.+))/
which does seem to match the right thing if there is only one set of parenthesis.
How can I get an array like above using any RegExp method in JavaScript? I need to return just that array because the returned items in the array will be looped through to create a URL routing scheme.
Advertisement
Answer
You need to make your regex pattern ‘non-greedy’ by adding a ?
after the .+
By default, *
and +
are greedy in that they will match as long a string of chars as possible, ignoring any matches that might occur within the string.
Non-greedy makes the pattern only match the shortest possible match.
See Watch Out for The Greediness! for a better explanation.
Or alternately, change your regex to
(([^)]+))
which will match any grouping of parentheses that do not, themselves, contain parentheses.