【问题标题】:Url parameter extraction in javascriptjavascript中的url参数提取
【发布时间】:2016-04-24 22:06:28
【问题描述】:

我有一个服务器端端点服务,它将端点传递给 javascript 服务。

端点可能如下所示:http://localhost/{value}/223/{type}

我希望 javascript 服务将端点的值(在花括号中)解析为当前 url。

因此:

function extractParameters(endpoint, currentUrl) {
//do some magic here

}

var data = extractParameters('http://localhost/{value}/223/{type}','http://localhost/test/223/hat');

返回一个像这样的对象{ value = 'test', type = 'hat'}

提前致谢

【问题讨论】:

  • 请展示你到目前为止所做的尝试
  • 到目前为止,我还没有把握——我正在考虑使用正则表达式匹配来查找所有没有大括号的匹配项,尝试在字符串中找到匹配项的索引以提取值 i想要...但它似乎相当广泛,我认为?有什么建议?我不需要一个实现——更多的是到达那里的过程:) @allicarn

标签: javascript regex asp.net-web-api


【解决方案1】:

我利用 split 函数从两个 URL 中解析出 http://,然后将两个 URL 拆分为文件夹/参数/等数组。使它们看起来像:["localhost","{value}","223","{type}"]["localhost","test","223","hat"]

然后我遍历第一个(模式)数组以挑选出您想要收集的东西,使用正则表达式查看它是否将花括号作为第一个和最后一个字符。如果是这样,我使用substring 提取大括号之间的值并将其缓存为键。

然后,由于两个数组应该遵循相同的模式,我使用该键的索引从传递的 url 中获取值。

我不确定它应该有多灵活,但是这段代码有几个场景没有很好地涵盖:如果 URL 的长度不同,localhost223 的值是否重要你的模式 - 如果不匹配,它会失败吗?

function extractParameters(pattern, currentUrl) {
  // extract out the http://
  var patternArr = pattern.split('//');
  if (patternArr.length > 1) {
    patternArr = patternArr[1];
  }
  var currUrlArr = currentUrl.split('//');
  if (currUrlArr.length > 1) {
    currUrlArr = currUrlArr[1];
  }

  // Separate each folder/parameter
  patternArr = patternArr.split('/');
  currUrlArr = currUrlArr.split('/');

  var obj = {};
  for (var i = 0; i < patternArr.length; i++) {
    if (patternArr[i].match(/^\{.*\}$/)) { // It matches the pattern {likethis}
      var key = patternArr[i].substring(1, patternArr[i].length - 1);
      var value = currUrlArr.length > i ? currUrlArr[i] : ""; // Get the value at the same index
      obj[key] = value;
    }
  }

  return obj;
}

var data = extractParameters('http://localhost/{value}/223/{type}', 'http://localhost/test/223/hat');
console.log(data);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2021-01-18
    • 1970-01-01
    • 2015-05-30
    • 2010-12-10
    • 1970-01-01
    相关资源
    最近更新 更多