0

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

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

所以,它会true返回example.comand 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

以及那些没有额外参数的相同 URL。

4

3 回答 3

1

尝试以下正则表达式:

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

正则表达式101演示

于 2013-10-17T20:24:41.100 回答
0

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

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

如何在 JavaScript 中获取不带任何参数的 URL?

于 2013-10-17T20:19:55.513 回答
0

将我的评论升级为答案:

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

意思:

 /^    # 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).
  /
于 2013-10-19T00:39:02.897 回答