RegEx匹配括号之间的东西

Osc*_*son 42 javascript regex arrays url url-routing

我很难让这个工作起来.我有一个字符串:

something/([0-9])/([a-z])
Run Code Online (Sandbox Code Playgroud)

我需要正则表达式或一种方法来获取括号之间的每个匹配并返回一系列匹配,如:

[
  [0-9],
  [a-z]
]
Run Code Online (Sandbox Code Playgroud)

我正在使用的正则表达式/\((.+)\)/,如果只有组括号,它似乎与正确的东西相匹配.

如何使用JavaScript中的任何RegExp方法获取上面的数组?我需要返回该数组,因为数组中返回的项将循环以创建URL路由方案.

Rob*_*sch 95

你需要通过添加'?'来使你的正则表达式模式'非贪婪' 在'.+'之后

默认情况下,'*'和'+'是贪婪的,因为它们将匹配尽可能长的字符串,忽略字符串中可能出现的任何匹配.

非贪婪使得模式只匹配最短的匹配.

注意贪婪!为了更好的解释.

或者,将正则表达式更改为

\(([^\)]+)\)
Run Code Online (Sandbox Code Playgroud)

这将匹配任何不包含parens的parens本身.

  • 你错过了内部开始和结束捕获的parens.尝试/ \\(([^)] +)\\)/ g,它将捕获所有可能的括号值.注意\\(和\\之前)的*second*对parens. (2认同)
  • 在我的例子中,要包含不包含任何其他括号的括号,我必须向正则表达式添加开放括号:`\(([^\)(]+)\)` (2认同)

Cha*_*ndu 6

使用此表达式:

/\(([^()]+)\)/g
Run Code Online (Sandbox Code Playgroud)

例如:

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


art*_*urh 5

如果 s 是您的字符串:

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