我有一个带有一些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执行此操作?
当前回答
在我的情况下(重定向到具有所有子url的新域)::
window.location.replace("https://newdomain.com" + window.location.pathname);
其他回答
使用URLSearchParams的超简单方法。
function getParam(param){
return new URLSearchParams(window.location.search).get(param);
}
目前,Chrome、Firefox、Safari、Edge和其他浏览器都支持它。
Eldon McGuinness的Gist是迄今为止我见过的JavaScript查询字符串解析器的最完整的实现。
不幸的是,它是作为jQuery插件编写的。
我将其重写为vanilla JS,并做了一些改进:
函数parseQuery(str){var qso={};var qs=(str|| document.location.search);//检查是否有空的查询字符串如果(qs==“”){回归qso;}//规范化查询字符串qs=qs.replace(/(^\?)/,“”).replace(/;/g,“&”);而(qs.indexOf(“&&”)!=-1) {qs=qs.替换(/&&/g,'&');}qs=qs.replace(/([\&]+$)/,“”);//将查询字符串拆分为多个部分qs=qs.拆分(“&”);//生成querystring对象对于(变量i=0;i<qs.length;i++){var qi=qs[i].split(“=”);qi=qi.map(函数(n){返回decodeURIComponent(n)});if(类型qi[1]==“未定义”){qi[1]=空;}if(qso[qi[0]的类型!==“未定义”){//如果键已经存在,则将其设置为对象if(typeof(qso[qi[0])==“string”){var temp=qso[qi[0]];如果(qi[1]==“”){qi[1]=空;}qso[qi[0]]=[];qso[qi[0]].推(温度);qso[qi[0]。push(qi[1]);}否则如果(typeof(qso[qi[0])==“对象”){如果(qi[1]==“”){qi[1]=空;}qso[qi[0]。push(qi[1]);}}其他{//如果没有键,只需将其设置为字符串如果(qi[1]==“”){qi[1]=空;}qso[qi[0]]=qi[1];}}回归qso;}//演示console.log(parseQuery(“?foo=bar&foo=boo&roo=bar;bee=bop;=ghost;=ghost2;&;checkbox%5B%5D=b1;checkbox%5 B%5D=b2;dd=;http=http%3A%2F%2Fw3schools.com%2My%20test.asp%3Fname%3Dst%C3%A5le%26car%3Dsaab&http=http%2A%2F%3F%2Fw3schools2.com%2Fmy%20est.asp%3Fame%3Dst%A5%A5le%26car%3Dsaab”);
另请参见此Fiddle。
我的解决方案:
/**
* get object with params from query of url
*/
const getParams = (url) => {
const params = {};
const parser = document.createElement('a');
parser.href = url;
const query = parser.search.substring(1);
if (query !== '') {
const vars = query.split('&');
for (let i = 0; i < vars.length; i++) {
const pair = vars[i].split('=');
const key = decodeURIComponent(pair[0]).replace('[]', '');
const value = decodeURIComponent(pair[1]);
if (key in params) {
if (Array.isArray(params[key])) {
params[key].push(value);
} else {
params[key] = [params[key]];
params[key].push(value);
}
} else params[key] = value;
}
}
return params;
}
使用replace()方法的最简单方法:
从urlStr字符串:
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
或从当前URL:
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
说明:
document.URL-接口以字符串形式返回文档位置(页面URL)。replace()-方法返回一个新字符串,其中模式的部分或全部匹配项由替换项替换。/.*param_name=([^&]*).*/-括在斜杠之间的正则表达式模式,表示:.*-零个或多个字符,param_name=-已搜索的param名称,正则表达式中的()-组,[^&]*-一个或多个字符,不包括&,|-交替,$1-对正则表达式中第一个组的引用。
var urlStr='www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5’;var c=urlStr.replace(/.*c=([^&]*).*|(.*)/,'$1');var notExisted=urlStr.replace(/.*not_existed=([^&]*).*|(.*)/,'$1');console.log(`c==='${c}');console.log(`notExisted=='${notExisted}');
function gup() {
var qs = document.location.search;
qs = qs.split('+').join(' ');
var params = {}, tokens, re = /[?&]?([^=]+)=([^&]*)/g;
while (tokens = re.exec(qs))
params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
return params;
}
像这样使用
var params = gup()
然后
params.param1
params.param2