Estou tentando encontrar um método relativamente fácil e confiável para extrair o URL base de uma variável de string usando JavaScript (ou jQuery).
Por exemplo, considerando algo como:
http://www.sitename.com/article/2009/09/14/this-is-an-article/
Eu gostaria de obter:
http://www.sitename.com/
Uma expressão regular é a melhor aposta? Em caso afirmativo, qual declaração eu poderia usar para atribuir o URL base extraído de uma determinada string a uma nova variável?
Eu fiz algumas pesquisas sobre isso, mas tudo o que encontro no mundo do JavaScript parece girar em torno da coleta dessas informações a partir da URL real do documento usando location.host ou similar.
javascript
regex
string
url
Estragar
fonte
fonte
Respostas:
Edit: Alguns reclamam que não leva em conta o protocolo. Por isso, decidi atualizar o código, pois está marcado como resposta. Para quem gosta de código de linha única ... desculpe por isso que usamos minimizadores de código, o código deve ser legível por humanos e, dessa forma, é melhor ... na minha opinião.
Ou use a solução Davids abaixo.
fonte
url = 'sitename.com/article/2009/09/14/this-is-an-article'; newurl = 'http://' + url.split('/')[0];
//now url === "http:://stackoverflow.com"
checkout::
Os navegadores baseados no WebKit, o Firefox a partir da versão 21 e as versões atuais do Internet Explorer (IE 10 e 11) são implementadas
location.origin
.location.origin
inclui o protocolo , o domínio e, opcionalmente, a porta da URL.Por exemplo,
location.origin
o URLhttp://www.sitename.com/article/2009/09/14/this-is-an-article/
éhttp://www.sitename.com
.Para direcionar navegadores sem suporte para
location.origin
usar o seguinte polyfill conciso:fonte
window.location.hostname
sentirá falta do número da porta, se for o caso, então usewindow.location.host
. Portanto, o 'nome da base' completo, incluindo a barra à direita, seria:window.location.protocol+"//"+window.location.host + "/";
Não precisa usar jQuery, apenas use
fonte
Não há razão para fazer divisões para obter o caminho, o nome do host etc. a partir de uma sequência que é um link. Você só precisa usar um link
Você pode fazer isso facilmente com o jQuery anexando o elemento e lendo seu atributo.
fonte
fonte
Então :
Para sua solicitação, você precisa de:
Revisão 07-2017: Também pode ser mais elegante e possui mais recursos
Então
Legal!
fonte
Se você estiver usando jQuery, essa é uma maneira interessante de manipular elementos em javascript sem adicioná-los ao DOM:
fonte
myAnchor.prop('hostname')
. Acho que o jQuery mudou nos últimos 5 anos ... Obrigado pela resposta!Uma abordagem leve, mas completa, para obter valores básicos a partir de uma representação de string de um URL é a regra de regexp de Douglas Crockford:
Se você está procurando um kit de ferramentas de manipulação de URL mais poderoso, experimente o URI.js Ele suporta getters, setter, normalização de URL, etc., todos com uma ótima API encadeada.
Se você está procurando um plugin jQuery, o jquery.url.js deve ajudá-lo
Uma maneira mais simples de fazer isso é usar um elemento âncora, como o @epascarello sugeriu. Isso tem a desvantagem de que você deve criar um elemento DOM. No entanto, isso pode ser armazenado em cache em um fechamento e reutilizado para vários URLs:
Use-o assim:
fonte
Bem, o objeto da API da URL evita dividir e construir manualmente os URLs .
fonte
Se você estiver extraindo informações de window.location.href (a barra de endereço), use este código para obter
http://www.sitename.com/
:Se você tiver uma sequência,
str
ou seja, um URL arbitrário (não window.location.href), use expressões regulares:Eu, como todo mundo no Universo, odeio ler expressões regulares, então vou descrevê-lo em inglês:
Não há necessidade de criar elementos DOM ou fazer qualquer coisa louca.
fonte
Eu uso um regex simples que extrai o host do URL:
e use assim
Observe que, se
url
não terminar com/
ahost
, não terminará em a/
.Aqui estão alguns testes:
fonte
Você pode usar os códigos abaixo para obter diferentes parâmetros do URL atual
fonte
Você pode usá-lo assim ...
O valor do URL será ...
O "var url" também contém dois métodos.
Nesse caso, o valor de paramQ será 1.
O valor de allParameters será apenas o nome dos parâmetros.
Testado no IE, chrome e firefox.
fonte
Em vez de ter que considerar window.location.protocol e window.location.origin e possivelmente perder um número de porta especificado, etc., basta pegar tudo até o terceiro "/":
fonte
Isso funciona:
fonte
location.pathname = '/'
Você pode fazer isso usando uma regex:
serve ?
fonte
Para obter a origem de qualquer URL, incluindo caminhos dentro de um site (
/my/path
) ou sem esquema (//example.com/my/path
) ou completo (http://example.com/my/path
), montei uma função rápida.No trecho abaixo, todas as três chamadas devem ser registradas
https://stacksnippets.net
.fonte
Isso funciona para mim:
fonte
window.location.href fornece o endereço de URL atual da barra de endereços do navegador
pode ser algo como https://stackoverflow.com/abc/xyz ou https://www.google.com/search?q=abc tilllastbackslashregex.exec () execute regex e execute novamente a sequência correspondente até a última barra invertida, ou seja, https : //stackoverflow.com/abc/ ou https://www.google.com/ respectivamente
fonte
Uma boa maneira é usar o
URL
objeto de API nativa do JavaScript . Isso fornece muitas partes úteis de URL.Por exemplo:
Como você pode ver aqui, basta acessar o que precisar.
Por exemplo:
console.log(urlObject.host); // "stackoverflow.com"
doc para URL
fonte