检查当前URL,即使有URL参数也返回true

时间:2013-10-17 20:15:10

标签: javascript regex

我正在检查URL中的特定模式,以便只在正确类型的页面上执行一组代码。目前,我有类似的东西:

/^http:\/\/www\.example\.com\/(?:example\/[^\/]+\/?)?$/;

因此,它会为trueexample.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

除了那些相同的网址没有额外的参数。

3 个答案:

答案 0 :(得分:1)

尝试以下正则表达式:

^http:\/\/www\.example\.com(?:\/example\/[^\/]+\/?)?\??.*$

regex101 demo

答案 1 :(得分:0)

您可以构建不带参数的URL,并将其与当前表达式进行比较。

location.protocol + '//' + location.host + location.pathname

How to get the URL without any parameters in JavaScript?

答案 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).
  /