Javascript RegExp匹配返回太多

时间:2013-05-07 23:57:50

标签: 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", "tab2", "tab3"]

所以我需要摆脱第三个索引项(“/ tab3”),并让它只使用'tab / tab2'字符串。

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

3 个答案:

答案 0 :(得分:1)

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

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

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

jsfiddle

答案 1 :(得分:1)

我用这个正则表达式来做到这一点:

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

现在我得到了这个回报

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

现在我只需要接受'tab / tab2'以及...

答案 2 :(得分:0)

不要将正则表达式放在“或”之间,使用/ g进行全局搜索,否则只返回第一次出现

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