Javascript 如何从get参数中获取值?

Javascript 如何从get参数中获取值?,javascript,url,url-parameters,Javascript,Url,Url Parameters,我有一个URL,其中包含一些GET参数,如下所示: www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 我需要得到c的全部值。我试图读取URL,但只得到了m2。如何使用JavaScript实现这一点?JavaScript本身没有处理查询字符串参数的内置功能 在(现代)浏览器中运行的代码您可以使用(这是浏览器提供给JS的API的一部分): var url\u字符串=”http://www.example.com/t.html?a=1&b=3&c

我有一个URL,其中包含一些GET参数,如下所示:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 
我需要得到
c
的全部值。我试图读取URL,但只得到了
m2
。如何使用JavaScript实现这一点?

JavaScript本身没有处理查询字符串参数的内置功能

在(现代)浏览器中运行的代码您可以使用(这是浏览器提供给JS的API的一部分):

var url\u字符串=”http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5”//window.location.href
var url=新的url(url\u字符串);
var c=url.searchParams.get(“c”);
控制台日志(c)JavaScript本身没有处理查询字符串参数的内置代码

在(现代)浏览器中运行的代码您可以使用(这是浏览器提供给JS的API的一部分):

var url\u字符串=”http://www.example.com/t.html?a=1&b=3&c=m2-m3-m4-m5”//window.location.href
var url=新的url(url\u字符串);
var c=url.searchParams.get(“c”);

控制台日志(c)您可以在
位置中获取查询字符串。搜索
,然后您可以分割问号后的所有内容:

var params = {};

if (location.search) {
    var parts = location.search.substring(1).split('&');

    for (var i = 0; i < parts.length; i++) {
        var nv = parts[i].split('=');
        if (!nv[0]) continue;
        params[nv[0]] = nv[1] || true;
    }
}

// Now you can get the parameters you want like so:
var abc = params.abc;
var params={};
if(location.search){
var parts=location.search.substring(1).split('&');
对于(变量i=0;i
您可以在
位置获取查询字符串。搜索
,然后您可以分割问号后的所有内容:

var params = {};

if (location.search) {
    var parts = location.search.substring(1).split('&');

    for (var i = 0; i < parts.length; i++) {
        var nv = parts[i].split('=');
        if (!nv[0]) continue;
        params[nv[0]] = nv[1] || true;
    }
}

// Now you can get the parameters you want like so:
var abc = params.abc;
var params={};
if(location.search){
var parts=location.search.substring(1).split('&');
对于(变量i=0;i


我见过的大多数实现都忽略了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);

我见过的大多数实现都忽略了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);
我使用图书馆。它允许您完全按照自己的要求执行:

var uri = 'www.test.com/t.html&a=1&b=3&c=m2-m3-m4-m5';
var c = uri.queryKey['c'];
// c = 'm2-m3-m4-m5'
我使用图书馆。它允许您完全按照自己的要求执行:

var uri = 'www.test.com/t.html&a=1&b=3&c=m2-m3-m4-m5';
var c = uri.queryKey['c'];
// c = 'm2-m3-m4-m5'

函数getURLParameters(paramName)
{
var sURL=window.document.URL.toString();
if(sURL.indexOf(“?”)大于0)
{
var arrParams=剩余分割(“?”);
var arrrurlparams=arrParams[1]。拆分(“&”);
var arrParamNames=新数组(arrrurlparms.length);
var arrParamValues=新数组(arrrurlparms.length);
var i=0;
对于(i=0;i

函数getURLParameters(paramName)
{
var sURL=window.document.URL.toString();
if(sURL.indexOf(“?”)大于0)
{
var arrParams=剩余分割(“?”);
var arrrurlparams=arrParams[1]。拆分(“&”);
var arrParamNames=新数组(arrrurlparms.length);
var arrParamValues=新数组(arrrurlparms.length);
var i=0;

对于(i=0;i我早就发现这一点,非常简单:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }
那么就这样称呼它:

var fType = getUrlVars()["type"];
document.write( tokens['id'] );

很久以前我就发现这很简单:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }
那么就这样称呼它:

var fType = getUrlVars()["type"];
document.write( tokens['id'] );

这是只检查一个参数的简单方法:

示例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“;//或当前url的window.location.href
var captured=/myParam=([^&]+)/.exec(url)[1];//值位于[1]('384'在本例中)
var result=captured?captured:'myDefaultValue';

即使URL充满参数,它也能正常工作。

这是一种只检查一个参数的简单方法:

示例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“;//或当前url的window.location.href
var captured=/myParam=([^&]+)/.exec(url)[1];//值位于[1]('384'在本例中)
var result=captured?captured:'myDefaultValue';

即使URL充满了参数,它也能正常工作。

这里有一个递归解决方案,它没有正则表达式,并且变异最小(只有params对象发生了变异,我相信这在JS中是不可避免的)

这太棒了,因为它:

var get_params = function(search_string) {

  var parse = function(params, pairs) {
    var pair = pairs[0];
    var parts = pair.split('=');
    var key = decodeURIComponent(parts[0]);
    var value = decodeURIComponent(parts.slice(1).join('='));

    // Handle multiple parameters of the same name
    if (typeof params[key] === "undefined") {
      params[key] = value;
    } else {
      params[key] = [].concat(params[key], value);
    }

    return pairs.length == 1 ? params : parse(params, pairs.slice(1))
  }

  // Get rid of leading ?
  return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}

var params = get_params(location.search);

// Finally, to get the param you want
params['c'];
<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>
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
  • 是递归的
  • 处理多个同名参数
  • 可以很好地处理格式错误的参数字符串(缺少值等)
  • 如果值中有“=”则不中断
  • 执行URL解码
  • 最后,这真是太棒了,因为它…啊
代码:

var get_params = function(search_string) {

  var parse = function(params, pairs) {
    var pair = pairs[0];
    var parts = pair.split('=');
    var key = decodeURIComponent(parts[0]);
    var value = decodeURIComponent(parts.slice(1).join('='));

    // Handle multiple parameters of the same name
    if (typeof params[key] === "undefined") {
      params[key] = value;
    } else {
      params[key] = [].concat(params[key], value);
    }

    return pairs.length == 1 ? params : parse(params, pairs.slice(1))
  }

  // Get rid of leading ?
  return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}

var params = get_params(location.search);

// Finally, to get the param you want
params['c'];
<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>
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');

这是一个递归解决方案,它没有正则表达式,并且变异最小(只有params对象发生了变异,我相信这在JS中是不可避免的)

这太棒了,因为它:

var get_params = function(search_string) {

  var parse = function(params, pairs) {
    var pair = pairs[0];
    var parts = pair.split('=');
    var key = decodeURIComponent(parts[0]);
    var value = decodeURIComponent(parts.slice(1).join('='));

    // Handle multiple parameters of the same name
    if (typeof params[key] === "undefined") {
      params[key] = value;
    } else {
      params[key] = [].concat(params[key], value);
    }

    return pairs.length == 1 ? params : parse(params, pairs.slice(1))
  }

  // Get rid of leading ?
  return search_string.length == 0 ? {} : parse({}, search_string.substr(1).split('&'));
}

var params = get_params(location.search);

// Finally, to get the param you want
params['c'];
<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>
paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
  • 是递归的
  • 处理多个同名参数
  • 可以很好地处理格式错误的参数字符串(缺少值等)
  • 如果“=”在v中,则不会中断
    const getUrlParams = url => `${url}?`.split('?')[1]
      .split('&').reduce((params, pair) =>
        ((key, val) => key ? {...params, [key]: val} : params)
        (...`${pair}=`.split('=').map(decodeURIComponent)), {});
    
    console.log(getUrlParams('https://google.com/foo?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
    console.log(getUrlParams('/foo?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
    console.log(getUrlParams('?a=1&b=2&c')); // Will log {a: '1', b: '2', c: ''}
    console.log(getUrlParams('https://google.com/')); // Will log {}
    console.log(getUrlParams('a=1&b=2&c')); // Will log {}
    
    const getUrlParams = (search: string) => `${search}?`
      .split('?')[1]
      .split('&')
      .reduce(
        (params: object, pair: string) => {
          const [key, value] = `${pair}=`
            .split('=')
            .map(decodeURIComponent)
    
          return key.length > 0 ? { ...params, [key]: value } : params
        },
        {}
      )
    
    interface IParams { [key: string]: string }
    
    const paramReducer = (params: IParams, pair: string): IParams => {
      const [key, value] = `${pair}=`.split('=').map(decodeURIComponent)
    
      return key.length > 0 ? { ...params, [key]: value } : params
    }
    
    const getUrlParams = (search: string): IParams =>
      `${search}?`.split('?')[1].split('&').reduce<IParams>(paramReducer, {})
    
    http://TestServer/Pages/NewsArchive.aspx?year=2013&Month=July
    
    <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>
    
    function getParams(url){
            var regex = /[?&]([^=#]+)=([^&#]*)/g,
                params = {},
                match;
            while(match = regex.exec(url)) {
                params[match[1]] = match[2];
            }
            return params;
        }
    
    let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
    let searchParams = new URLSearchParams(url.search);
    console.log(searchParams.get('c'));  // outputs "m2-m3-m4-m5"
    
    function getVal(str) {
        var v = window.location.search.match(new RegExp('(?:[\?\&]'+str+'=)([^&]+)'));
        return v ? v[1] : null;
    }
    
     function getUrlQueryParams(url) {
      var queryString = url.split("?")[1];
      var keyValuePairs = queryString.split("&");
      var keyValue = [];
      var queryParams = {};
      keyValuePairs.forEach(function(pair) {
        keyValue = pair.split("=");
        queryParams[keyValue[0]] = decodeURIComponent(keyValue[1]).replace(/\+/g, " ");
    });
      return queryParams;
    }
    
    // Query parameters with strings only, no special characters.
    var currentParams = getUrlQueryParams("example.com/foo?number=zero");
    alert(currentParams["number"]); // Gives "zero".
    
    // For the URL you stated above...
    var someParams = getUrlQueryParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ");
    alert(someParams["c"]); // Gives "m2-m3-m4-m5".
    
    // For a query params with URI encoding...
    var someParams = getUrlQueryParams("www.example.com/t.html?phrase=a%20long%20shot&location=Silicon+Valley%2C+USA");
    alert(someParams["phrase"]); // Gives "a long shot".
    alert(someParams["location"]); // Gives "Silicon Valley, USA".
    
    // http:localhost:8080/path?param_1=a&param_2=b
    var getParamsMap = function () {
        var params = window.location.search.split("&");
        var paramsMap = {};
        params.forEach(function (p) {
            var v = p.split("=");
            paramsMap[v[0]]=decodeURIComponent(v[1]);
        });
        return paramsMap;
    };
    
    // -----------------------
    
    console.log(getParamsMap()["param_1"]);  // should log "a"     
    
    function getParam(param){
      return new URLSearchParams(window.location.search).get(param);
    }
    
    new URL(location.href).searchParams.get("my_key");
    
    paramVal = urlStr.replace(/.*param_name=([^&]*).*|(.*)/, '$1');
    
    paramVal = document.URL.replace(/.*param_name=([^&]*).*|(.*)/, '$1');