RegEx中的可选字符串

时间:2014-06-25 07:50:15

标签: javascript regex

我想知道网址是否是博客页面。 博客页面可以是:

  • /blog
  • /blog/page/1
  • /blog/page/143

因此,page/pageNumber是可选的。如果url是博客页面,如何创建正在测试的正则表达式返回true

我为包含/page/字符串的网址创建了正则表达式,它似乎工作正常:

/\/blog\/page\/[1-9]([0-9]*)/

示例:

> /\/blog\/page\/[1-9]([0-9]*)/.test("/blog/page/1")
true
> /\/blog\/page\/[1-9]([0-9]*)/.test("/blog/page/0")
false
> /\/blog\/page\/[1-9]([0-9]*)/.test("/blog/page/30")
true

但是如何将/page/number设置为可选?

我试过了:

/\/blog(\/page\/[1-9]([0-9]*))?/

这会返回true的错误网址:

> /\/blog(\/page\/[1-9]([0-9]*))?/.test("/blog/p")
true

4 个答案:

答案 0 :(得分:1)

您应该添加结束标记($),以便停止检查。

> /\/blog(\/page\/[1-9]([0-9]*))?$/.test("/blog/p")
false
> /\/blog(\/page\/[1-9]([0-9]*))?$/.test("/blog/page/1")
true
> /\/blog(\/page\/[1-9]([0-9]*))?$/.test("/blog/page/0")
false
> /\/blog(\/page\/[1-9]([0-9]*))?$/.test("/blog/page/30")
true
> /\/blog(\/page\/[1-9]([0-9]*))?$/.test("/blog")
true

答案 1 :(得分:1)

您想为字符串的开头(^)和结尾($)添加标记。在它的当前形式中,如果它只匹配部分字符串,则您的检查也将返回true。

/^\/blog(\/page\/[1-9]([0-9]*))?$/

查看此fiddle

答案 2 :(得分:1)

您可以使用此正则表达式使/page/num可选:

/^\/blog(\/page\/\d+)?\/?$/

答案 3 :(得分:0)

你可以使用非捕获组,

^\/blog(?:\/page(?:\/[1-9]\d*)?)?$