正则表达式匹配可选参数

时间:2017-09-27 13:27:14

标签: javascript regex

我试图写一个正则表达式来匹配路径末尾的可选参数 我想覆盖前4个路径,但不是最后一个路径:

/main/sections/create-new
/main/sections/delete
/main/sections/
/main/sections
/main/sectionsextra

到目前为止,我已创建了这个:

/\/main\/sections(\/)([a-zA-z]{1}[a-zA-z\-]{0,48}[a-zA-z]{1})?/g

这只能找到第一个3.如何使它与前4个案例匹配?

1 个答案:

答案 0 :(得分:2)

您可以将有问题的字符串与以/开头的可选字符串与字符串末尾之后的/以外的任何1个或多个字符进行匹配:

\/main\/sections(?:\/[^\/]*)?$
                ^^^^^^^^^^^^^^

请参阅regex demo。如果您确实需要将可选子部分限制为仅包含字母和-,并且在开始/结束时不允许-(长度为2+个字符),请使用

/\/main\/sections(?:\/[a-z][a-z-]{0,48}[a-z])?$/i

或者,也允许1个char子部分:

/\/main\/sections(?:\/[a-z](?:[a-z-]{0,48}[a-z])?)?$/i

<强>详情

  • \/main\/sections - 文字子串/main/sections
  • (?:\/[^\/]*)? - 一个可选的非捕获组,匹配1或0次出现:
    • \/ - /字符
    • [^\/]* - 与/以外的任何0 +字符匹配的否定字符类
  • $ - 字符串结束。

JS演示:

&#13;
&#13;
var strs = ['/main/sections/create-new','/main/sections/delete','/main/sections/','/main/sections','/main/sectionsextra'];
var rx = /\/main\/sections(?:\/[^\/]*)?$/;
for (var s of strs) {
  console.log(s, "=>", rx.test(s));
}
&#13;
&#13;
&#13;