URL 模式匹配问题,.+匹配所有之后

URL Pattern Matching issue, .+ matches all after

我正在将存储的 URLs 与当前的 URL 进行匹配,但遇到了一点问题 - 正则表达式在与 URL 本身匹配时工作正常,但是出于某种原因,所有子目录也匹配(当然,当我只想直接匹配时)。

假设用户存储 www.facebook.com,这应该同时匹配 http://www.facebook.comhttps://www.facebook.com,并且确实如此

问题是它也在匹配子目录,例如https://www.facebook.com/events/upcoming

正则表达式例如:

/.+:\/\/www\.facebook\.com/

匹配以下内容:

https://www.facebook.com/events/upcoming

什么时候应该匹配

 http://www.facebook.com/
 https://www.facebook.com/

如何修复这个看似损坏的正则表达式?

放置结束标记 $,例如:

/.+:\/\/www\.facebook\.com\/$/

但实际上也应该有一个开始标记 ^,例如:

/^https?:\/\/www\.facebook\.com\/$/

此外,如果您要匹配当前域,您也可以只匹配 location.host 而不是 location.href

尝试在正则表达式的末尾添加一个 $。它是字符串结束的符号。

如果您对要匹配的内容非常具体,为什么不在 RegExp 中反映出来?

/^https?:\/\/(?:(?:www|m)\.)?facebook\.com\/?$/

  • http 或 https
  • www., m.或者没有子域名
  • facebook.com

Demo

编辑以包含可选的尾部反斜杠