简化JavaScript regexp

时间:2016-02-15 21:33:39

标签: javascript regex

如何简化我的正则表达式(^(\w+)\/(\w+)\/(\d+)$|^(\w+)\/(\w+)\/$|^(\w+)\/(\w+)$)以匹配controller/action(/id)等示例?我目前的正则表达式看起来如此漫长而复杂:(

匹配示例:

controller/action
controller/action/
controller/action/123

非匹配:

controller/
controller/action/action
controller/action/123/
controller/action/123/456

1 个答案:

答案 0 :(得分:4)

您可以使用以下带有可选组的正则表达式:

^

请参阅regex demo

此正则表达式匹配:

  • (\w+) - 字符串的开头
  • \/ - 一个或多个字母数字或下划线字符
  • / - (\w+)符号
  • (?:\/(\d+)?)? - 一个或多个字母数字或下划线字符
  • (?:...)? - 一个可选的(一次或零次)序列(由于(?:...)构造,一个非捕获组? +一个\/ - 一个或零 - 量词)匹配
    • (\d+)? - 正斜杠
    • ? - 匹配一个或多个数字的可选捕获组(但由于(...)量词应用于整个组$,因此该组可能会丢失)
  • {{1}} - 字符串锚定结束。