Gostaria de saber como funciona a função abaixo que extrai determinado parâmetro do url
do html
, porém gostaria de uma explicação das variáveis e termos dentro desta função.
Se puderem me ajudar eu agradeceria
Segue descrição:
URL:
http://127.0.0.1:9090/portal.cgi/PP_FILE_STORE/Public/HYBRIDReport.html?reportid=58cef1dcc40e004b0000005e
Função:
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,
function(m,key,value) {
vars[key] = value;
});
return vars;
}
function getUrlVars() {
declaração da função
var vars = {};
declaração da variável vars como um objeto.
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
aqui tem algumas coisas concatenadas.
Da esquerda para a direita (não que seja a ordem de execução)
Declara-se a variável parts.
Obtém-se o conteúdo da url (window.location.href)
Utiliza a regex para quebrar o que vem após o '?" ou “&” da url (ou seja, os parâmetros passados) e transforma-os em um vetor, como chave e valor
vars[key] = value;
preenche o objeto vars com a combinação chave/valor obtida a partir dos parâmetros da url
});
finaliza a função interna
return vars;
retorna o objeto vars
}
finaliza a função
Obrigado Luis pelas explicações!
Porém ainda estou em dúvida sobre o argumento m na função. O que ele faria nesse contexto…??
O argumento m simplesmente retorna o match, ou seja, a porção integral da string que foi encontrada pela expressão regular fornecida. Neste contexto, retorna ?reportid=58cef1dcc40e004b0000005e, mas como você está interessado apenas nos parâmetros da url (neste caso, a chave reportid e o valor 58cef1dcc40e004b0000005e), o argumento é ignorado pela função.
Você pode ler mais sobre a função replace na documentação da Mozilla, sempre um bom recurso para entender melhor o javascript!
2 curtidas
Ok!
Mas como o sistema sabe que o resultado da regex vai compor um objeto com propriedade…?
Quando coloco vars[key] = value ele já leva em consideração que o grupo 1 derivado da regex é a propriedade e o grupo 2 será seu valor…??
Ainda não ficou muito claro pra mim…
Desculpe.
Obrigado.
Ele não sabe. A construção da função interna é baseada na possibilidade. Caso saia fora do esperado, lança-se um erro.
Como o Luis disse, o sistema não sabe. Eu não sou expert em regex, mas basicamente a expressão regular dessa função vai retornar todo o(s) texto(s) depois dos caracteres ‘?’ ou ‘&’, separados em duas “partes”, uma antes e uma depois do sinal ‘=’. É assim que se espera que uma url com parâmetros seja construida, e se uma url correta for alimentada à função, retornará os valores corretos.
Um site como regex101 pode te ajudar a visualizar isso melhor. Coloca a regex e a sua url nos campos indicados e dá uma olhada no painel da direita, ele te explica passo a passo como o match é feito. Experimenta incluir um novo parâmetro ao final da url, como &teste=123, e você vai ver que a expressão retorna os valores corretos, dois parâmetros e seus respectivos valores. Agora, se você adicionar o novo parâmetro no inicio da url, ou em algum outro lugar não esperado, nada garante que a função retorne corretamente a lista de propriedades e valores respectivos.
1 curtida
Além do que o @pedrosbmartins disse, tenha em mente que o javascript é uma linguagem poderosíssima e, como diria o tio Ben, “com grandes poderes, vêm grandes responsabilidades”.
Assim sendo, você consegue fazer coisas incríveis e, ao mesmo tempo, pode cometer atrocidades horríveis com isso.
1 curtida