Javascript:匹配网址的slug

时间:2013-07-19 19:36:25

标签: javascript regex

对于给定的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 个答案:

答案 0 :(得分:3)

如果我们可以假设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"

答案 1 :(得分:2)

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

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

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


绩效考核

.split.pop()个答案和.subtring().lastIndexOf()个函数进行比较,我的方法是 at least 35% faster 。对 ~2.6m ops / sec 评分 ~4m ops / sec

如果表现对您来说很重要,您可能需要考虑我的答案。

答案 2 :(得分:1)

试试这个:

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

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

答案 3 :(得分:1)

又一种方式(我假设你也想要; art6066,1184999在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];