Как получить базовый URL с FTP-адреса?

0

Например, у меня есть URL-адрес: ftp://xxx: [email protected]/BigFile.zip

Как я могу получить example.com из этого URL-адреса, используя javascript/jquery?

Теги:

5 ответов

2
Лучший ответ

Вы можете заставить браузер проанализировать URL-адрес для вас следующим образом:

var a = document.createElement('a');
a.href = 'ftp://xxx:[email protected]/BigFile.zip';
var host = a.hostname;

Это даст вам имя хоста, которое в этом случае будет ftp.example.com, если по какой-то причине вам нужно удалить субдомен, вы можете сделать

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

FIDDLE

Здесь различные части URL-адреса → https://developer.mozilla.org/en-US/docs/Web/API/Location#wikiArticle

0

У вас может быть регулярное выражение, чтобы сделать это для вас.

url = 'ftp://xxx:[email protected]/BigFile.zip'

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

Это будет содержать ftp.example.com. Вы можете настроить его в соответствии с вашими потребностями.

0

Вы можете использовать jquery следующим образом:

var url = "ftp://xxx:[email protected]/BigFile.zip";

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

Здесь используется javascript RegExp

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

Вы также можете использовать i в конце регулярного выражения, чтобы сделать регистр нечувствительным к регистру.

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

Я просто хотел попробовать/добавить что-то другое (не могу делать ставку на производительность или общее решение, но он работает и эй! Без участия DOM/regexp):

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

Для данного случая может быть самый короткий, так как всегда будет ".com"

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

Другой (грязный) подход (и будет работать с .com.something:

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

И на этом мы зависим от того, что "@ftp" и косые черты "/" (по крайней мере, 3 из них или один после .com.something), например, не будут работать: ftp://xxx:[email protected]

Последнее обновление Это будет мой лучший

  • без DOM/RegExp, лучше (но и запутать), что предыдущие
  • решает проблему наличия или отсутствия косой черты,
  • все еще зависит от наличия "@ftp". в строке.
  • работает с .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]);
    

Как всегда, это зависит от того, насколько вы поддерживаете свой код, насколько я вам нужен, я просто хотел удостовериться в том, что там более чем один способ закодировать что-то. Мой ответ наверняка не самый лучший, но на его основе вы могли бы улучшить свой вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню