4

尝试编写一个 javascript 小书签以从前端链接跳转到 CMS 编辑页面链接。

所以采取这样的网址

http://www.example.com/events/13097/article

并制作一个这样的网址

http://www.example.com/admin/edit.php?class=events&id=13097

我想我需要使用正则表达式来获取类和 id,然后将其包装到一个 javascript 函数中 - 但我是一个绝对的初学者,想知道是否有人可以让我开始?

4

3 回答 3

4

不需要正则表达式,试试这个:

var url = ""+window.location;
var urlparts = url.split('/');
window.location = "http://www.example.com/admin/edit.php?class="+urlparts[3]+"&id="+urlparts[4];

从 URL 中拆分类和 id 并在重定向中重复它们。第一行将 the 转换window.location为您也可以String(window.location)用来执行此操作的字符串,但这更冗长。

要获取域,您可以使用:

"http://"+urlparts[2]+"/admin/edit.php?class="+urlparts[3]+"&id="+urlparts[4]

编辑:实际上,您可以urlparts使用或模拟对象中其他感兴趣的项目window.location.href.split('/')的原始代码(来自这篇文章的示例)window.location.toString().split('/')window.location

hash: "#10013173"
host: "stackoverflow.com"
hostname: "stackoverflow.com"
href: "https://stackoverflow.com/questions/10012966/change-url-with-bookmarklet/10013173#10013173"
origin: "http://stackoverflow.com"
pathname: "/questions/10012966/change-url-with-bookmarklet/10013173"
port: ""
protocol: "http:"
search: ""
于 2012-04-04T14:26:02.377 回答
0

这是在 C# 单元测试中使用的正则表达式的示例。由于您不熟悉正则表达式,因此该模式与您的源 url 相同,除了两个捕获组:一个用于 class (?<class>[^/]+),一个用于 id (?<id>[^/]+)。每个的工作原理是它需要一个或多个不是斜杠的字符(加号)(^/)并将其存储在尖括号中名称的正则表达式组中。

var source = "http://www.domain.com/events/13097/article";
var expected = "http://www.domain.com/admin/edit.php?class=events&id=13097";
var pattern = "http://www.domain.com/(?<class>[^/]+)/(?<id>[^/]+)/article";
var r = new Regex(pattern);
var actual = r.Replace(source, "http://www.domain.com/admin/edit.php?class=${class}&id=${id}");
Assert.AreEqual(expected, actual);
于 2012-04-04T14:21:45.610 回答
0
//var str = window.location.href;
var str = "http://www.example.com/events/13097/article";
var re = /events\/(\d+)\//;
var match = str.match(re);
var newURL = "http://www.example.com/admin/edit.php?class=events&id=" + match[1];
alert(newURL);
于 2012-04-04T14:22:36.340 回答