我很难让它发挥作用。我有一个像这样的字符串:
something/([0-9])/([a-z])
而且我需要正则表达式或获取括号之间的每个匹配项并返回匹配数组的方法,例如:
[
[0-9],
[a-z]
]
如果只有一组括号,我正在使用的正则表达式/\((.+)\)/
似乎确实匹配正确的东西。
如何使用 JavaScript 中的任何 RegExp 方法获取上述数组?我只需要返回该数组,因为数组中返回的项目将被循环以创建 URL 路由方案。
我很难让它发挥作用。我有一个像这样的字符串:
something/([0-9])/([a-z])
而且我需要正则表达式或获取括号之间的每个匹配项并返回匹配数组的方法,例如:
[
[0-9],
[a-z]
]
如果只有一组括号,我正在使用的正则表达式/\((.+)\)/
似乎确实匹配正确的东西。
如何使用 JavaScript 中的任何 RegExp 方法获取上述数组?我只需要返回该数组,因为数组中返回的项目将被循环以创建 URL 路由方案。
您需要通过添加 '?' 使您的正则表达式模式“非贪婪”。在“.+”之后
默认情况下,'*' 和 '+' 是贪婪的,因为它们将匹配尽可能长的字符字符串,忽略字符串中可能出现的任何匹配。
非贪婪使模式只匹配最短的匹配项。
看到小心贪婪!为了更好的解释。
或者,将您的正则表达式更改为
\(([^\)]+)\)
这将匹配本身不包含括号的任何括号分组。
使用这个表达式:
/\(([^()]+)\)/g
例如:
function()
{
var mts = "something/([0-9])/([a-z])".match(/\(([^()]+)\)/g );
alert(mts[0]);
alert(mts[1]);
}
如果 s 是您的字符串:
s.replace(/^[^(]*\(/, "") // trim everything before first parenthesis
.replace(/\)[^(]*$/, "") // trim everything after last parenthesis
.split(/\)[^(]*\(/); // split between parenthesis
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]"]