如何从FTP地址获取基本URL?

时间:2014-03-19 18:36:42

标签: javascript jquery regex

例如我有一个网址: ftp://xxx:xxx@ftp.example.com/BigFile.zip

如何使用javascript / jquery从此网址获取example.com?

5 个答案:

答案 0 :(得分:2)

您可以让浏览器为您解析URL:

var a = document.createElement('a');
a.href = 'ftp://xxx:xxx@ftp.example.com/BigFile.zip';
var host = a.hostname;

这会获得主机名,在本例中为ftp.example.com,如果由于某种原因您必须删除子域,则可以执行

var domain = host.split('.');
domain.shift();
var domain = domain.join('.');

FIDDLE

以下是网址的不同部分 - > https://developer.mozilla.org/en-US/docs/Web/API/Location#wikiArticle

答案 1 :(得分:0)

以下是使用javascript RegExp

input = "ftp://xxx:xxx@ftp.example.com/BigFile.zip";
pattern = new RegExp(/ftp:\/\/\S+?@\S+?\.([^\/]+)/);
match = pattern.exec(input);
alert(match[1]);

您还可以在正则表达式的末尾使用i使其不区分大小写。

pattern = new RegExp(/ftp:\/\/\S+?@\S+?\.([^\/]+)/i);

答案 2 :(得分:0)

您可以像这样使用jquery:

var url = "ftp://xxx:xxx@ftp.example.com/BigFile.zip";

var ahref = $('<a>', { href:url } )[0]; // create an <a> element
var host = ahref.hostname.split('.').slice(1).join('.'); // example.com

答案 3 :(得分:0)

您可以使用正则表达式为您执行此操作。

url = 'ftp://xxx:xxx@ftp.example.com/BigFile.zip'

base_address = url.match(/@.*\//)[0];
base_address = base_address.substring(1, base_address.length-1)

但这将包含ftp.example.com。您可以根据需要对其进行微调。

答案 4 :(得分:0)

我只想尝试/添加不同的东西(不能为性能或一般解决方案下注,但它有效且嘿!没有涉及DOM / regexp):

var x="ftp://xxx:xxx@ftp.example.com/BigFile.zip"
console.log((x.split(".")[1]+ "." + x.split(".")[2]).split("/")[0]);

对于给定的情况可以是最短的,因为总是会是&#34; .com&#34;

console.log(x.split(".")[1]+ ".com");

另一种(凌乱)方法(并将与.com.something一起使用:

console.log(x.substring((x.indexOf("@ftp"))+5,x.indexOf(x.split("/")[3])-1));

在这方面,我们依赖于&#34; @ ftp&#34;和斜线&#34; /&#34; (例如,至少有3个或.com.something之后的一个)不适用于:ftp://xxx:xxx@ftp.example.com

上次更新这将是我最好的

  • 没有DOM / RegExp,比之前的
  • 更好(但也令人困惑)
  • 解决了有关或不要使用斜杠的问题,
  • 仍然依赖于&#34; @ftp。&#34;在字符串中。
  • 适用于.com.something.whatever

    (function (splittedString){
        //this is a bit nicer, no regExp, no DOM, avoid abuse of "split" 
        //method over and over the same string
    
        //check if we have a "/"
        if(splittedString.indexOf("/")>=0){
    
        //split one more time only to get what we want.
            return (console.log(splittedString.split("/")[0]));
        }
        else{
             return (console.log(splittedString));//else we have what we want
        }
    
    })(x.split("@ftp.")[1]);
    

一如既往,这取决于您希望代码的可维护性,我只想表达对不止一种编码方式的肯定。我的回答肯定不是最好的,但基于此,你可以改善你的问题。