我正在检查URL中的特定模式,以便只在正确类型的页面上执行一组代码。目前,我有类似的东西:
/^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/;
因此,它会为true
和example.com
返回example.com/example/anythinghere/
。但是,有时这个网站会在URL的末尾附加?postCount=25
或类似的参数,所以你会得到:
example.com/example/anythinghere/?postCount=25
因此,如果我将当前表达式抛出到条件中,如果有URL参数,它将返回false。我如何才能最好地改变正则表达式以允许可选 URL参数通配符,这样,如果有一个问号后跟任何其他信息,它将始终返回true,如果是省略了,它仍然会返回true?
它需要返回true:
http://www.example.com/?argumentshere
和
http://www.example.com/example/anythinghere/?argumentshere
除了那些相同的网址没有额外的参数。
答案 0 :(得分:1)
答案 1 :(得分:0)
您可以构建不带参数的URL,并将其与当前表达式进行比较。
location.protocol + '//' + location.host + location.pathname
答案 2 :(得分:0)
将我的评论升级为答案:
/^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/;
Meanse:
/^ # start of string
http:\/\/www\.example\.com\/ #literal http://www.example.com/
(?:
example\/[^\/]+\/? #followed by example/whatever (optionally closed by /)
)?
$ end-of-string
/
这里的主要问题是您的要求(“后跟可选的查询字符串”)与您的正则表达式(需要字符串结尾)不匹配。我们通过以下方式解决:
/^ # start of string
http:\/\/www\.example\.com\/ #literal http://www.example.com/
(?:
example\/[^\/]+\/? #followed by example/whatever (optionally closed by /)
)?
(\?|$) followed by either an end-of-string (original), or a literal `?` (which in url context means the rest is a query string and not a path anymore).
/