正则表达式确定网站根目录

时间:2013-03-18 12:47:37

标签: javascript regex

我有以下网址,并且所有这些网址都被视为网站的根目录,如何使用正则表达式使用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对话框,并且仅当用户位于网站的根目录时才会显示。

3 个答案:

答案 0 :(得分: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'

答案 1 :(得分:0)

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

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

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

/^\/site(test|dev)?\/(index\.html)?$/.test(location.pathname)

答案 2 :(得分: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

为例