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]); } ```

Original source