我有以下字符串
http://example.com
https://example.com
http://www.example.com
如何摆脱http://
或https://
?
答案 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);
答案 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.username
,a.password
,a.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}`);