2010-10-22 23 views
8

He las siguientes cadenasdespegar el protocolo HTTP o HTTPS de una cadena JavaScript

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

cómo me deshago de la http:// o https://?

+3

Puede que no sea así, pero si su intención es vincularse al mismo esquema que la ubicación actual, puede hacer '// site.com'. –

Respuesta

22

Pruebe con esto:

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

"http" olvidado – Bick

+7

Funciona tanto con http como con https. El carácter "s" es opcional. – ncardeli

+0

Me gusta mucho lo limpio que es este código. No veo por qué es necesaria su segunda expresión regular ... La primera elimina el protocolo http/https si está presente. Si no está presente, no hay nada que reemplazar y la cadena se devuelve tal como está. – some

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

para los enlaces de análisis sin HTTP/HTTPS usar esto:

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

funciona muy bien, pero ¿qué pasa si la cadena puede o no tener http: // algunos vienen con el formato como site.com y en los que falla – Trace

+0

Si no hay "http/https": – Bick

+0

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

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

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

En lugar de .substr(), también se puede utilizar .slice() o .substring(). Todos producirán el mismo resultado en esta situación.

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

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

EDIT: Parece como si los requisitos de la cuestión han cambiado en un comentario debajo de otra respuesta.

Si hay posiblemente no es un http:// en la cadena, a continuación, hacer esto:

var str = "site.com"; 

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

Creo que tienes el idioma equivocado allí: P –

+2

Me gusta este, muy simple, y no hay necesidad de una expresión regular. @Jacob me parece un javascript perfectamente válido? –

+0

convertirá "site.com" en "te.com" ... idx = str.indexOf (':') if (idx> = 0) { str = str.substr (idx + 3); } –

1

el protocolo de Gaza desde una URL:

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

Funciona con cualquier protocolo, ftp, http, gopher, nntp, telnet, wais, file, prospero ... todos los especificados en RFC 1738 con la excepción de aquellos sin un // en ellos (mailto, noticias).

0

Suponiendo que no haya dos barras que no sean el protocolo, que podría hacer:

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

Usted puede utilizar HTMLHyperlinkElementUtils de 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' 

De 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.

0

Javascript uso de la función de división también dervies la solución. Awesome !!!

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

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

Puede usar URL() constructor. Analizará su cadena de url y habrá una entrada sin protocolo. Por lo menos dolor de cabeza con las expresiones regulares:

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 

Aunque URL() gotas a cabo un protocolo, que te deja con www parte. En mi caso, quería deshacerme de esa parte del subdominio también, así que tuve que usarla de todas formas para .replace().

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

Esta respuesta se extiende algunas respuestas anteriores, http://, https://, o// que también es común.

Gracias por las respuestas anteriores que me llevaron a esto!

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

Aquí hay un link to a codepen.

Cuestiones relacionadas