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,]+)?$))