对于给定的 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-]/);
对于给定的 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-]/);
如果我们可以假设 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"
这将获取最后一个斜杠 ( /
) 之后和第一个半逗号 ( ;
) 之前的值:
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。
如果性能对您来说很重要,您可能需要考虑我的回答。
尝试这个:
var slug = url.match(/.*\/([-a-z0-9]+)/i)[1];
.*\/
跳过所有内容,直到最后一个/
. [-a-z0-9]+
匹配 1 个或多个字母数字或连字符。将后者放入(...)
使其成为捕获组,并[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();
var slug = url.split('/').pop().split(';')[0];