从网址获取ID

时间:2014-08-27 15:11:52

标签: javascript

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

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

您认为这是最好的方式。一些代码示例也非常有用。

4 个答案:

答案 0 :(得分:1)

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

正则表达式解释:

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

答案 1 :(得分:1)

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

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

\d+这意味着您正在寻找至少一个数字,后跟零到无限数量。

答案 2 :(得分:1)

编写面向未来的代码很难,因为很难预测将来我们可能会做的疯狂事情!

但是,如果我们假设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

答案 3 :(得分:0)

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

我只想使用字符串split

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是否在parts数组的范围内。但这只会使这个示例代码变得丑陋并且很容易添加。根据您期望(或不期望)的值,您可能还想使用isNaN

检查值是否为数字