开发者

taking off the http or https off a javascript string

I have the following strings

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

how do i get rid of the http:// or h开发者_如何学运维ttps://?


Try with this:

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


You can use the URL object like this:

const urlWithoutProtocol = new URL(url).host;


You may use URL() constructor. It will parse your url string and there will be an entry w/o protocol. So less headache with 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

Although URL() drops out a protocol, it leaves you with www part. In my case I wanted to get rid of that subdomain part as well, so had to use to .replace() anyway.

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


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

for parsing links without http/https use this:

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


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

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

Instead of .substr(), you could also use .slice() or .substring(). They'll all produce the same result in this situation.

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

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

EDIT: It appears as though the requirements of the question have changed in a comment under another answer.

If there possibly isn't a http:// in the string, then do this:

var str = "site.com";

var index = str.indexOf('://');
if( index > -1 )
   str = str.substr( index + 3 );


This answer extends some answers above, http://, https://, or // which is also common.

Thanks for answers above that led me to this!

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);

Here's a link to a codepen.


Strip the protocol from a URL:

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

Works with any protocol, ftp, http, gopher, nntp, telnet, wais, file, prospero ... all those specified in RFC 1738 with the exception of those without a // in them (mailto, news).


Please note that in real web pages inherited protocol // is a common practice https://paulirish.com/2010/the-protocol-relative-url.

So I suggest regexp covering this case as well:

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

(you can optimize it)


Another efficient solution,

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


Assuming there are no double slashes other than the protocol, you could do:

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


You may use HTMLHyperlinkElementUtils of DOM:

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'

From HTMLHyperlinkElementUtils on MDN:

a.hostname, example.com
a.host, example.com:3000
a.pathname, /foo/bar.html
a.search, ?a=1&b=2
a.hash, #goo
a.username, a.password, a.port, etc.


Using regex might be an overkill when there's a handy native URL interface that does the job for you in 2 lines:

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


Javascript use of split function also dervies the solution. Awesome !!!

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜