0

我正在编写一个路由器,它将解析 url 并重定向到代码中的必要组件,当我更改我的 url 并使用它传递对象 id 时,我想使用正则表达式解析它并路由它以通过 id 获取该对象。

mysite.com/blah#path=folder/?folderId=klafjlka

如何使用 javscript 正则表达式解析此 url 并将其路由到该文件夹

关于主干,我想编写一个代码来执行此操作,但我没有使用主干

routes : { "folder/:id" : "handler" },
4

2 回答 2

1

我倾向于发现在这些情况下使用 .split 通常会创建更具可读性的代码。

如果您最初使用 window.location.hash 来获取数据,那么您将剩下

#path=folder/?folderId=klafjlka

消除第一批不需要的东西。其余的可以简单地通过拆分和循环拆分来完成。

//Remove the initial hash from the window.location.hash
var hash = window.location.hash.substr(1),
    //Split it down so we have ["path=folder","folderId=klafjlka"]
    paramSplit = hash.split("/?");

var params = {};
for (var x=0; x<paramSplit.length; x++){
  //Split it at the equals
  var split = paramSplit[x].split("=");
  params[split[0]]=split[1];
}

console.log(params);

参数应该返回

{
  path: "folder",
  folderId: "klafjlka"
}

无论您的目的是什么,它都很容易使用。

于 2013-01-21T21:27:04.373 回答
0

如果您的 url 在字符串中并且始终具有相同的结构

var url = 'mysite.com/blah#path=folder/?folderId=klafjlka';
var re = /#path=(.+?)\?folderId=(.*)/i
var args = url.match(re);
var path = args[1];
var id = args[2];

这将搜索#path=并捕获以下字符,直到?然后搜索?folderId=并捕获其他所有内容。

现在path将包含folder/并将id包含klafjlka

于 2013-01-21T21:25:57.690 回答