2013-05-07 117 views
1

我需要一个字符串,并从中获取一些值。我有这个字符串:Javascript RegExp匹配返回太多

'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”)的,也让它只用“标签/ TAB2”字符串工作。

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

回答

1

你不需要为这个表达式,只需使用split()方法:

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

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

jsfiddle

+0

对于这个简单的例子是,但还有更多的事情这需要RegExp。 – 2013-05-08 00:51:57

0

不要把“或”使用/克至使全球其他搜索仅第一次出现正则表达式之间返回

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

这是真的,内部代码实际上使用新的RegExp来使用生成的字符串(为什么我只能访问最后一个分组)。已更新原始帖子以反映此: – 2013-05-08 00:51:28

1

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

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

现在我得到这样的回报

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

现在我只需要允许“选项卡/ TAB2”被接受藏汉...

+0

使用此: 'tab/tab2'.match(new RegExp('^ tab /([%a-zA-Z0-9 \ - \ _ \ s,] +)( ?:?(?:/){1}([%α-ZA-Z0-9 \ - \ _ \ S,] +))$')) – 2013-05-08 01:21:34