Javascript RegExp匹配返回太多

Javascript RegExp匹配返回太多,javascript,regex,match,Javascript,Regex,Match,我需要获取一个字符串并从中获取一些值。我有这个字符串: 'tab/tab2/tab3' “/tab3”是可选的,因此此字符串也应适用: 'tab/tab2' 我目前正在尝试这一方法,这在很大程度上是有效的: 'tab/tab2/tab3'.match(new RegExp('^tab/([%a-zA-Z0-9\-\_\s,]+)(/([%a-zA-Z0-9-_s,]+)?)$')); 这将返回: ["tab/tab2/tab3", "tab2", "/tab3", "tab3"] 但我希

我需要获取一个字符串并从中获取一些值。我有这个字符串:

'tab/tab2/tab3'
“/tab3”是可选的,因此此字符串也应适用:

'tab/tab2'
我目前正在尝试这一方法,这在很大程度上是有效的:

'tab/tab2/tab3'.match(new RegExp('^tab/([%a-zA-Z0-9\-\_\s,]+)(/([%a-zA-Z0-9-_s,]+)?)$'));
这将返回:

["tab/tab2/tab3", "tab2", "/tab3", "tab3"]
但我希望它能回来

["tab/tab2/tab3", "tab2", "tab3"]
所以我需要去掉第三个索引项(“/tab3”),并让它只使用“tab/tab2”字符串


更复杂的是,我只能控制最后一个分组中的
/([%a-zA-Z0-9-_s,]+)?
部分,这意味着它将始终包装在一个分组中。

您不需要正则表达式,只需使用
split()
方法:

var str = 'tab/tab2/tab3';
var arr = str.split('/');

console.log(arr[0]); //tab
console.log(arr[1]); //tab2

不要将正则表达式置于“或”之间,使用/g进行全局搜索,否则只返回第一个匹配项

"tab/tab2/tab3".match(/tab[0-9]/g)

我使用此regexp来执行以下操作:

'tab/tab2/tab3'.match(new RegExp('^tab/([%a-zA-Z0-9\-\_\s,]+)(?:/)([%a-zA-Z0-9-_s,]+)$'));
现在我得到这份回报

["tab/tab2/tab3", "tab2", "tab3"]

现在我只需要允许“tab/tab2”也被接受…

这是真的,内部代码实际上使用新的RegExp来使用生成的字符串(我只能访问最后一个分组的原因)。更新了原始帖子以反映这一点:对于这个简单的示例,是的,但还有更多需要RegExp的地方。使用此选项:'tab/tab2'。匹配(新RegExp('^tab/([%a-zA-Z0-9\-\us,]+)(?:(?:/){1}([%a-zA-Z0-9\-\us,]+)?$))