2013-05-07 151 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