1

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

'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,]+)?最后一个分组中的部分,这意味着它将始终包含在一个分组中。

4

3 回答 3

1

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

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

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

jsfiddle

于 2013-05-08T00:04:57.083 回答
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'也被接受......

于 2013-05-08T01:10:26.093 回答
0

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

"tab/tab2/tab3".match(/tab[0-9]/g)
于 2013-05-08T00:28:13.337 回答