Get id from url

Get id from url

本文关键字:url from id Get      更新时间:2023-09-26

我有以下示例url:#/reports/12/expense/11

我需要在报告->12之后获得id。我在这里问的是最合适的方法。我可以在url中搜索reports,然后获取内容。。。但是,如果在某个时刻我决定更改url,我将不得不更改我的算法。

你认为这里最好的方式是什么。一些代码示例也将非常有用。

很难编写经得起未来考验的代码,因为很难预测我们未来可能会做的疯狂事情!

然而,如果我们假设id将始终是URL中连续数字的字符串,那么您可以简单地查找:

function getReportId(url) {
  var match = url.match(/'d+/);
  return (match) ? Number(match[0]) : null;
}
getReportId('#/reports/12/expense/11'); // => 12
getReportId('/some/new/url/report/12'); // => 12

您应该使用正则表达式来查找字符串中的数字。将正则表达式传递给字符串的.match()方法将返回一个数组,该数组包含基于正则表达式的匹配项。在这种情况下,您感兴趣的返回数组的项将位于1的索引处,假设该数字始终在reports/:之后

var text = "#/reports/12/expense/11";
var id = text.match(/reports'/('d+)/);
alert(id[1]);

这里的'd+意味着你要寻找至少一个后面跟着零到无限数量的数字。

var text = "#/reports/12/expense/11";
var id = text.match("#/[a-zA-Z]*/([0-9]*)/[a-zA-Z]*/")
console.log(id[1])

Regex解释:

  • #/与字符#/字面匹配
  • [a-zA-Z]*-匹配一个单词
  • /符合字符/字面意思
  • 第一个捕获组-([0-9]*)-这与一个数字匹配
  • [a-zA-Z]*-匹配一个单词
  • /符合字符/字面意思

正则表达式可能很棘手(添加昂贵的内容)。所以通常情况下,如果你能在没有他们的情况下有效地做同样的事情,你应该这样做。查看您的URL格式,您可能希望至少对其进行一些约束,否则问题将非常复杂。例如,您可能想假设该值总是直接出现在键后面,因此在您的示例报告中=12,费用=11,但报告和费用可以切换(例如,费用/11/report/12),您会得到相同的结果。

我只想使用字符串分割:

var parts = url.split("/");
for(var i = 0; i < parts.length; i++) {
  if(parts[i] === "report"){
    this.reportValue = parts[i+1];
    i+=2;
  }
  if(parts[i] === "expense"){
    this.expenseValue = parts[i+1];
    i+=2;
  }
}

因此,通过这种方式,您的关键/价值部分可以出现在阵列中的任何位置

注意:您还需要检查i+1是否在零件阵列的范围内。但这只会让这个示例代码变得丑陋,而且很容易添加。根据您期望(或不期望)的值,您可能还想使用isNaN 检查值是否为数字