My web application needs to parse numeric ranges in strings that are enclosed by parenthesis. I’ve never really understood regex properly so I need some assistance. The code below is kind of what I’m looking to do (I’ll then split the string on the hyphen and get the min/max values). Obviously the pattern is wrong – the example below alerts “(10-12) foo (5-10) bar” when my desired result is 1 alert saying (10-12) and the next saying (5-10), or better yet those values without the parenthesis if that’s possible.
Any assistance is appreciated.
var string = "foo bar (10-12) foo (5-10) bar";
var pattern = /\(.+\)/gi;
matches = string.match(pattern);
for (var i in matches) {
alert(matches[i]);
}
Make your quantifier lazy by adding a
?after the+. Otherwise, it will greedily consume as much as possible, from your opening(to the last)in the string.jsFiddle.
If you don’t want to include the parenthesis in your matches, generally you’d use a positive lookahead and lookbehind for parenthesis. JavaScript doesn’t support lookbehinds (though you can fake them). So, use…
jsFiddle.
Also…
iflag in your regex; you don’t match any letters.var. In your example,matcheswill be global.for (in)to iterate over an array. You should also check thatmatch()doesn’t returnnull(if no results were found).