我有一个看起来像“/testpress/about/”的字符串,我需要将其转换为“about”。
我可以通过执行以下操作轻松删除 testpress:
var slug=relativeUrl.replace("testpress", "");
我没有删除斜线的运气:
noslash = slug.replace(/\\/g, '');
我该如何解决这个问题,所以我只剩下想要的蛞蝓?
我有一个看起来像“/testpress/about/”的字符串,我需要将其转换为“about”。
我可以通过执行以下操作轻松删除 testpress:
var slug=relativeUrl.replace("testpress", "");
我没有删除斜线的运气:
noslash = slug.replace(/\\/g, '');
我该如何解决这个问题,所以我只剩下想要的蛞蝓?
这是因为您使用了错误的斜杠
noslash = slug.replace(/\//g, '');
看这里:
> "/testpress/about/".replace(/\//g, '')
'testpressabout'
我喜欢 RegEx 方法。这样你就可以看到所有的路径组件。
var path = "/testpress/about/";
var pathComponents = path.match(/([^\/]+)/g);
// to get current page... (last element)
var currentPageSlug = pathComponents[pathComponents.length - 1];
无论尾部斜杠如何,这都将起作用。好消息是,无论 URL 结构有多深,您始终可以通过将它们引用为pathComponents[0]
、pathComponents[1]
、pathComponents[2]
等来获取路径组件...
使用 RegEx 方法,您也不需要在替换/匹配/拆分函数中定义“testpress”。这样,它使您的代码更具可重用性。
您还可以使用正则表达式来匹配斜线之后但字符串末尾之前的所有内容,如下所示:
var text = "testpress/about";
var slug = text.match(/([^\/]+)\/?$/)[1];
//slug -> "about"
你为什么不使用
"testpress/about/".split('\/')
这将产生
["testpress", "about", ""]
你有它:数组的第二个元素。
我喜欢@Michael Coxon 的回答,但接受的解决方案没有考虑查询参数或“.html”之类的东西。您可以尝试以下方法:
getSlugFromUrl = function(url) {
var urlComponents = url.match(/([^\/]+)/g),
uri = urlComponents[urlComponents.length - 1];
uri = uri.split(/[\.\?\&]/g);
if (uri.length) {
slug = uri[0];
}
return slug;
};
这应该只返回蛞蝓而不是之后的任何东西。
JSBin 这里: http: //jsbin.com/sonowolise/edit ?html,js,console