对于给定的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-]/);
答案 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();
var slug = url.split('/').pop().split(';')[0];