0

我有以下 url,所有这些 url 都被认为是网站的根目录,我如何使用 javascript location.pathname 使用正则表达式来确定下面的模式,因为你会注意到“网站”这个词在这个模式中重复..

 http://www.somehost.tv/sitedev/
 http://www.somehost.tv/sitetest/
 http://www.somehost.tv/site/

 http://www.somehost.tv/sitedev/index.html
 http://www.somehost.tv/sitetest/index.html
 http://www.somehost.tv/site/index.html

我试图仅在用户位于网站根目录时才显示 jQuery 对话框。

4

3 回答 3

2

只需使用 DOM 来解析它。无需调用正则表达式解析器。

var url = 'http://www.somesite.tv/foobar/host/site';
    urlLocation = document.createElement('a');

urlLocation.href = url;
alert(urlLocation.hostname);    // alerts 'www.somesite.tv'
于 2013-03-18T13:05:18.447 回答
0

一个完整的模式,包括协议和域,可能是这样的:

/^http:\/\/www\.somehost\.tv\/site(test|dev)?\/(index\.html)?$/

但是,如果您要匹配,请location.pathname尝试

/^\/site(test|dev)?\/(index\.html)?$/.test(location.pathname)
于 2013-03-18T12:55:35.270 回答
0

如果您不明确需要正则表达式

你也可以做例如

  • 用您的网址填充数组
  • 循环一个递减的子串
    • 最短的元素。
  • 对比一下
    • 最长的元素。
  • 直到他们匹配。

 var urls = ["http://www.somehost.tv/sitedev/",
 "http://www.somehost.tv/sitetest/",
 "http://www.somehost.tv/site/",
 "http://www.somehost.tv/sitedev/index.html",
 "http://www.somehost.tv/sitetest/index.html",
 "http://www.somehost.tv/site/index.html"]

     function getRepeatedSub(arr) {
         var srt = arr.concat().sort();
         var a = srt[0];
         var b = srt.pop();
         var s = a.length;
         while (!~b.indexOf(a.substr(0, s))) {
             s--
         };
         return a.substr(0, s);
     }
 console.log(getRepeatedSub(urls)); //http://www.somehost.tv/site   

这是一个关于JSBin的例子

于 2013-03-18T14:06:27.930 回答