Например, у меня есть URL-адрес: ftp://xxx: [email protected]/BigFile.zip
Как я могу получить example.com из этого URL-адреса, используя javascript/jquery?
Вы можете заставить браузер проанализировать 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('.');
Здесь различные части URL-адреса → https://developer.mozilla.org/en-US/docs/Web/API/Location#wikiArticle
У вас может быть регулярное выражение, чтобы сделать это для вас.
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
. Вы можете настроить его в соответствии с вашими потребностями.
Вы можете использовать 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
Здесь используется 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);
Я просто хотел попробовать/добавить что-то другое (не могу делать ставку на производительность или общее решение, но он работает и эй! Без участия 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]
Последнее обновление Это будет мой лучший
работает с .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]);
Как всегда, это зависит от того, насколько вы поддерживаете свой код, насколько я вам нужен, я просто хотел удостовериться в том, что там более чем один способ закодировать что-то. Мой ответ наверняка не самый лучший, но на его основе вы могли бы улучшить свой вопрос.