从javascript字符串中删除http或https

时间:2010-10-22 18:22:51

标签: javascript

我有以下字符串

http://example.com
https://example.com
http://www.example.com

如何摆脱http://https://

13 个答案:

答案 0 :(得分:30)

试试这个:

var url = "https://site.com";
var urlNoProtocol = url.replace(/^https?\:\/\//i, "");

答案 1 :(得分:4)

var txt="https://site.com";
txt=/^http(s)?:\/\/(.+)$/i.exec(txt);
txt=txt[2];

解析没有http / https的链接时使用:

var txt="https://site.com";
txt=/^(http(s)?:\/\/)?(.+)$/i.exec(txt);
txt=txt[3];

答案 2 :(得分:2)

var str = "https://site.com";

str = str.substr( str.indexOf(':') + 3 );

您也可以使用.substr().slice()代替.substring()。在这种情况下,它们都会产生相同的结果。

str = str.slice( str.indexOf(':') + 3 );

str = str.substring( str.indexOf(':') + 3 );

编辑:似乎问题的要求在另一个答案下的评论中发生了变化。

如果字符串中可能 <{1}},请执行以下操作:

http://

答案 3 :(得分:2)

这个答案扩展了上面的一些答案,http://https:// //这也很常见。

感谢上面的回答让我想到了这个!

const urls = [ "http://example.com", "https://example.com", "//example.com" ]

// the regex below states: replace `//` or replace `//` and the 'stuff'
const resolveHostNames = urls.map(url => url.replace(/\/\/|.+\/\//, ''))

console.log(resolveHostNames);

这是link to a codepen

答案 4 :(得分:1)

从URL中删除协议:

var url = "https://site.com";
var urlNoProto = url.split('/').slice(2).join('/');

适用于任何协议,ftp,http,gopher,nntp,telnet,wais,file,prospero ...... RFC 1738中指定的所有协议,但没有//中的那些协议(mailto,news)。< / p>

答案 5 :(得分:1)

您可以使用URL() constructor。它会解析你的url字符串,并且会有一个没有协议的条目。所以regexps让人不那么头疼:

let u = new URL('https://www.facebook.com/companypage/');
URL {
    hash: ""
    host: "www.facebook.com"
    hostname: "www.facebook.com"
    href: "https://www.facebook.com/companypage/"
    origin: "https://www.facebook.com"
    password: ""
    pathname: "/companypage/"
    port: ""
    protocol: "https:"
    search: ""
    searchParams: URLSearchParams {}
    username: ""
}
u.host // www.facebook.com
u.hostname // www.facebook.com

虽然URL()会删除协议,但它会留下www部分。在我的情况下,我也希望摆脱那个子域部分,所以不得不使用.replace()

u.host.replace(/^www./, '') // www.facebook.com => facebook.com

答案 6 :(得分:1)

另一种有效的解决方案

url.replace(/(^(\w+:)?\/\//, '')

答案 7 :(得分:0)

假设除了协议之外没有双斜杠,你可以这样做:

 var url = "https://example.com";
 var noProtocol = url.split('//')[1];

答案 8 :(得分:0)

您可以使用DOM的 HTMLHyperlinkElementUtils

function removeProtocol(url) {
  const a = document.createElement('a');
  a.href = url;
  // `url` may be relative, but `a.href` will be absolute.
  return a.href.replace(a.protocol + '//', '');
}

removeProtocol('https://example.com/https://foo');
// 'example.com/https://foo'

removeProtocol('wrong://bad_example/u');
// 'bad_example/u'

来自HTMLHyperlinkElementUtils on MDN

a.hostname example.com
a.host example.com:3000
a.pathname /foo/bar.html
a.search?a = 1&amp; b = 2
a.hash #goo
a.usernamea.passworda.port

答案 9 :(得分:0)

请注意,在实际网页中继承协议 //是一种常见做法https://paulirish.com/2010/the-protocol-relative-url

所以我建议regexp也涵盖这个案例:

/^\/\/|^https?:\/\//

(你可以优化它)

答案 10 :(得分:0)

Javascript使用split函数也可以解决这个问题。 太棒了!!!

var url = "https://example.com";

url = url.split("://")[1];    // for https use url..split("://")[0];
console.log(url);

答案 11 :(得分:0)

您可以像这样使用URL对象:

const urlWithoutProtocol = new URL(url).host;

答案 12 :(得分:0)

当有一个方便的原生 URL 界面可以在 2 行中为您完成工作时,使用正则表达式可能是一种矫枉过正:

let url = "https://stackoverflow.com/questions/3999764/taking-off-the-http-or-https-off-a-javascript-string";
let a = new URL(url);
let withoutProtocol = a.host+a.pathname;
console.log(`Without protocol: ${withoutProtocol}`);
console.log(`With protocol: ${url}`);

URL API Support in browsers