Regex/Javascript for Matching Values in Parenthesis
javascript, regex
Solution
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.
var string = "foo bar (10-12) foo (5-10) bar",
pattern = /\(.+?\)/g,
matches = string.match(pattern);
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...
var string = "foo bar (10-12) foo (5-10) bar",
pattern = /\((.+?)\)/g,
match,
matches = [];
while (match = pattern.exec(string)) {
matches.push(match[1]);
}
jsFiddle.
Also...
- You don't need the `i` flag in your regex; you don't match any letters.
- You should always scope your variables with `var`. In your example, `matches` will be global.
- You shouldn't use a `for (in)` to iterate over an array. You should also check that `match()` doesn't return `null` (if no results were found).
Problem
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]); } ```