首页 文章

简化JavaScript regexp

提问于
浏览
2

如何简化我的正则表达式 (^(\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 回答

  • 4

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

    ^(\w+)\/(\w+)(?:\/(\d+)?)?$
                 ^^^       ^ ^
    

    regex demo

    这个正则表达式匹配:

    • ^ - 字符串的开头

    • (\w+) - 一个或多个字母数字或下划线字符

    • \/ - 一个 / 符号

    • (\w+) - 一个或多个字母数字或下划线字符

    • (?:\/(\d+)?)? - 可选(一次或零次出现)序列(由于 (?:...)? 构造,非捕获组 (?:...) a ? - 一个或零个量词)匹配

    • \/ - 正斜杠

    • (\d+)? - 匹配一个或多个数字的可选捕获组(但由于 ? 量词应用于整个组 (...) ,因此该组可能会丢失)

    • $ - 字符串锚点结束 .

相关问题