Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JavaScript将URL参数(内联和后?)转换为对象_Javascript_Angularjs_Regex - Fatal编程技术网

使用JavaScript将URL参数(内联和后?)转换为对象

使用JavaScript将URL参数(内联和后?)转换为对象,javascript,angularjs,regex,Javascript,Angularjs,Regex,我正在考虑创建一个普通JavaScript函数,该函数根据给定特定URL路径的URL路径定义创建一个参数对象。与AngularJS作为服务的一部分所做的非常相似。例如 给定以下路径定义: /page1/{id} 和的实际URL路径: /page1/23?fname=Jon&lname=Doe 我想创建以下对象: { "id": 23, "fname": "Jon", "lname": "Doe" } 任何帮助都将不胜感激。这就是我一直在寻找的。这是一个非常粗糙的示

我正在考虑创建一个普通JavaScript函数,该函数根据给定特定URL路径的URL路径定义创建一个参数对象。与AngularJS作为服务的一部分所做的非常相似。例如

给定以下路径定义:

/page1/{id}
和的实际URL路径:

/page1/23?fname=Jon&lname=Doe
我想创建以下对象:

{
   "id": 23,
   "fname": "Jon",
   "lname": "Doe"
}

任何帮助都将不胜感激。

这就是我一直在寻找的。这是一个非常粗糙的示例,代码显然可以得到优化和清理

function getParams(route, path) {
  var result = {};
  var queryString = (path.indexOf("?") > -1) ? path.substr(path.indexOf("?") + 1, path.length) : null;
  queryString.split("&").forEach(function(part) {
    if(!part) return;
    part = part.replace("+"," ");
    var eq = part.indexOf("=");
    var key = eq>-1 ? part.substr(0,eq) : part;
    var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : "";
    var from = key.indexOf("[");
    if(from==-1) result[decodeURIComponent(key)] = val;
    else {
      var to = key.indexOf("]");
      var index = decodeURIComponent(key.substring(from+1,to));
      key = decodeURIComponent(key.substring(0,from));
      if(!result[key]) result[key] = [];
      if(!index) result[key].push(val);
      else result[key][index] = val;
    }
  });
  var re = /{(\w+)}/g;
  var results = [];
  while (match = re.exec(route)) {
      results.push(match[1]);
  }
  var re2 = /\/page1\/id\/(\w+)\/name\/(\w+)/g;
  var results2 = re2.exec(path);
  for (var i = 0; i < results.length; i++) {
    result[results[i]] = results2[i + 1];
  }
  return result;
}
var route = "/page1/id/{id}/name/{name}";
var path = "/page1/id/23/name/leon?fname=Jon&lname=Doe";
var params = getParams(route, path);
console.log("PARAMS:", params);

谷歌
javascript查询字符串
并将
{id}
替换为正则表达式
\w+
@h2oooooo谢谢您的快速回复。这将如何为我获取值id?我当然可以找到23个,但我不知道密钥应该是id。@DipenShah不确定有什么帮助,我需要用香草javascript提供解决方案。谢谢你。@LeonRevill你在原来的帖子里没有提到这一点
PARAMS: Object {fname: "Jon", lname: "Doe", id: "23", name: "leon"}