RegEx to match stuff between parentheses

JavascriptRegexArraysUrlUrl Routing

Javascript Problem Overview


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.

Javascript Solutions


Solution 1 - Javascript

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 parens that do not, themselves, contain parens.

Solution 2 - Javascript

Use this expression:

/\(([^()]+)\)/g

e.g:

function()
{
	var mts = "something/([0-9])/([a-z])".match(/\(([^()]+)\)/g );
	alert(mts[0]);
	alert(mts[1]);
}

Solution 3 - Javascript

If s is your string:

s.replace(/^[^(]*\(/, "") // trim everything before first parenthesis
 .replace(/\)[^(]*$/, "") // trim everything after last parenthesis
 .split(/\)[^(]*\(/);      // split between parenthesis

Solution 4 - Javascript

var getMatchingGroups = function(s) {
  var r=/\((.*?)\)/g, a=[], m;
  while (m = r.exec(s)) {
    a.push(m[1]);
  }
  return a;
};

getMatchingGroups("something/([0-9])/([a-z])"); // => ["[0-9]", "[a-z]"]

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionOscar GodsonView Question on Stackoverflow
Solution 1 - JavascriptRob RaischView Answer on Stackoverflow
Solution 2 - JavascriptChanduView Answer on Stackoverflow
Solution 3 - JavascriptarturhView Answer on Stackoverflow
Solution 4 - JavascriptmaericsView Answer on Stackoverflow