JS RegExp匹配none或all

时间:2015-04-20 19:56:27

标签: javascript regex

如果有零个或多个"选项"我试图创建一个匹配字符串的RegExp。例如,我希望匹配这三个字符串:

'user'
'user/1'
'user/1/admin'

我目前有这个:

/^user(?:(?:\/){1}([%a-zA-Z0-9\-\_\s,]+))*$/g

这将匹配它们,但它只会返回最后一个匹配的选项。所以在第二个字符串上,它会记住'1'。在3日,它会记住'admin'。在第3天,我想要记住['1', 'admin']

这需要是动态的,以允许1个或无限制的选项。

这样我可以定义类似user:args的内容,然后我可以返回args。

2 个答案:

答案 0 :(得分:0)

正则表达式只能记住最后一次迭代。但是,您可以编写一些复杂的代码或使用

进行匹配
^user((\/[\w %,-]+)+)?$

然后将匹配$1拆分为/

答案 1 :(得分:0)

以下是使用符合您要求的string.split()解决方案。



var strings = [
  'user',
  'user/1',
  'user/1/admin',
  'blah/ignore/this/user',
  'blah/ignore/this/too/user/1/admin',
  'blah/this/should/also/be/ignored/user/1'
];

function getArgs(str,base) {
  // If the string doesn't contain the requested base, ignore.
  if (str.indexOf(base) === -1) return undefined;
  var options = str.split(base)[1];
  return options.substring(1).split('/');
}

strings.forEach(function(str) {
  console.log(str,getArgs(str,'user'));
});