1

对于给定的 URL,我想使用 Javascript 和正则表达式检索其 slug。我尝试了以下方法,但它只匹配h而不匹配This-is-the-slug-to-be-matched

var url = "http://www.domain.com/region/town/This-is-the-slug-to-be-matched;art6066,1184999";
var slug = url.match(/[a-z0-9-]/);
4

4 回答 4

4

如果我们可以假设 slug 总是跟在最后一个正斜杠之后,并且在最后一个正斜杠之后的第一个冒号之前:

> var url = "http://www.domain.com/region/town/This-is-the-slug-to-be-matched;art6066,1184999";
> var slug = url.split("/").pop().split(";")[0];

输出:

> console.log(slug);
  "This-is-the-slug-to-be-matched"
于 2013-07-19T19:50:04.547 回答
2

这将获取最后一个斜杠 ( /) 之后和第一个半逗号 ( ;) 之前的值:

var slug = url.substring(url.lastIndexOf('/')+1, url.indexOf(';'));

所以在这种情况下,slug == "This-is-the-slug-to-be-matched"


性能评估

比较.split.pop()答案和.subtring()函数.lastIndexOf(),我的方法至少快 35%。得分~4m ops/sec~2.6m ops/sec

如果性能对您来说很重要,您可能需要考虑我的回答。

于 2013-07-19T19:50:04.167 回答
2

尝试这个:

var slug = url.match(/.*\/([-a-z0-9]+)/i)[1];

.*\/跳过所有内容,直到最后一个/. [-a-z0-9]+匹配 1 个或多个字母数字或连字符。将后者放入(...)使其成为捕获组,并[1]返回第一个捕获组。

于 2013-07-19T19:40:34.713 回答
1

另一种方式(我假设你也想要 ;art6066,1184999 in slug)

var url = "http://www.domain.com/region/town/This-is-the-slug-to-be-matched;art6066,1184999";   
var slug = url.split('/').pop();

根据 cr0 的评论更新

var slug = url.split('/').pop().split(';')[0];
于 2013-07-19T19:43:46.480 回答