我需要编写 JS 正则表达式(或函数)来告诉我字符串是否采用该格式:
/root/:param1/:param2/:param3/.../
或者
/root/:param1/:param2/:param3/... (without last slash)
有什么想法吗? 谢谢。
最佳答案
如果我正确地解释了您的问题,那么看起来我们可以将此模式分解为三个主要组成部分:
- 以
/root
开头 - 后跟一些
/:param
- 可以选择后跟
/
现在我们只需要为每个组件开发正则表达式并将它们组合起来:
- 以
/root
开头- 字符串的开头由
^
标记,后面是/root
^/root
- 字符串的开头由
- 后跟一些
/:param
:- 假设
:param
应匹配 1-N 个不是正斜杠的字符(+
运算符)[^/]
< - 这给了我们
/[^/]+
- 可以使用组和
*
运算符来匹配整个单元的 0-N:(/[^/]+)*
- 假设
- 可以选择后跟
/
- 使用
?
运算符:/?
- 附加
$
来指定字符串的结尾
- 使用
我们一起得到正则表达式^/root(/[^/]+)*/?$
。您可以使用 RegExp.prototype.test
来检查匹配项:
r = new RegExp('^/root(/[^/]+)*/?$')
r.test('/root') // => true
r.test('/root/') // => true
r.test('/root/apple/banana') // => true
r.test('/root/zebra/monkey/golf-cart/') // => true
如果您要匹配 URL 路径段 you'll need to use a more specific character set而不是我在这里使用的 [^/]
字符。
关于JavaScript 正则表达式函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23981630/