我有一个带有一些GET参数的URL,如下所示:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
我需要得到c的全部值。我试图读取URL,但只得到m2。如何使用JavaScript执行此操作?
我有一个带有一些GET参数的URL,如下所示:
www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5
我需要得到c的全部值。我试图读取URL,但只得到m2。如何使用JavaScript执行此操作?
当前回答
下面是一个获取单个参数的简单函数:
function getUrlParam(paramName) {
var match = window.location.search.match("[?&]" + paramName + "(?:&|$|=([^&]*))");
return match ? (match[1] ? decodeURIComponent(match[1]) : "") : null;
}
这些特殊情况的处理与URLSearchParams一致:
如果缺少参数,则返回null。如果参数存在但没有“=”(例如“?param”),则返回“”。
笔记如果参数名称可能包含特殊的URL或正则字符(例如,如果它来自用户输入),则需要对其进行转义
function getUrlParamWithSpecialName(paramName) {
return getUrlParam(encodeURIComponent(paramName).replace(/[.*+?^${}()|[\]\\]/g, "\\$&"));
}
其他回答
使用道场。这里没有其他解决方案是如此简短或经过充分测试的:
require(["dojo/io-query"], function(ioQuery){
var uri = "www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ";
var query = uri.substring(uri.indexOf("?") + 1, uri.length);
var queryObject = ioQuery.queryToObject(query);
console.log(queryObject.c); //prints m2-m3-m4-m5
});
我更喜欢使用可用的资源,而不是重新设计如何解析这些参数。
将URL解析为对象提取搜索参数部分将searchParams从迭代器转换为具有数组扩展的数组。将键值数组缩减为一个对象。
常量url='http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5';const params=[…新URL(URL).searchParams.entries()].reduce((a,c)=>对象.assign(a,{[c[0]]:c[1]}),{})console.log(参数);
这是一种只检查一个参数的简单方法:
示例URL:
http://myserver/action?myParam=2
Javascript示例:
var myParam = location.search.split('myParam=')[1]
如果URL中存在“myParam”。。。变量myParam将包含“2”,否则将未定义。
在这种情况下,可能需要一个默认值:
var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';
更新:这更有效:
var url = "http://www.example.com/index.php?myParam=384&login=admin"; // or window.location.href for current url
var captured = /myParam=([^&]+)/.exec(url)[1]; // Value is in [1] ('384' in our case)
var result = captured ? captured : 'myDefaultValue';
即使URL中充满了参数,它也能正常工作。
我需要读取一个URLGET变量,并根据URL参数完成一个操作。我到处寻找解决方案,结果发现了一小段代码。它基本上读取当前页面url,对url执行一些正则表达式,然后将url参数保存在关联数组中,我们可以轻松访问该数组。
作为一个例子,如果我们有下面的url,底部有javascript。
http://TestServer/Pages/NewsArchive.aspx?year=2013&Month=July
获取参数id和page所需要做的就是调用这个:
准则将是:
<script type="text/javascript">
var first = getUrlVars()["year"];
var second = getUrlVars()["Month"];
alert(first);
alert(second);
function getUrlVars() {
var vars = {};
var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(m,key,value) {
vars[key] = value;
});
return vars;
}
</script>
我见过的大多数实现都错过了URL对名称和值的解码。
下面是一个通用的实用程序函数,它也可以进行正确的URL解码:
function getQueryParams(qs) {
qs = qs.split('+').join(' ');
var params = {},
tokens,
re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs)) {
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
}
return params;
}
//var query = getQueryParams(document.location.search);
//alert(query.foo);