将URL字符串转换为slug

时间:2013-05-23 14:47:08

标签: javascript url

我有一个类似于“/ testpress / about /”的字符串,我需要将其转换为“about”。

我可以通过以下方式轻松删除testpress:

var slug=relativeUrl.replace("testpress", "");

我没有幸运删除斜杠:

noslash = slug.replace(/\\/g, '');

我怎么能这样做,所以我留下了想要的slu ??

5 个答案:

答案 0 :(得分:4)

这是因为你使用了错误的斜杠

noslash = slug.replace(/\//g, '');

看这里:

> "/testpress/about/".replace(/\//g, '')
'testpressabout'

答案 1 :(得分:3)

我喜欢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方法,您也不需要在replace / match / split函数中定义'testpress'。这样,它可以使您的代码更具可重用性。

答案 2 :(得分:1)

为什么不使用

"testpress/about/".split('\/')

将产生

["testpress", "about", ""]

并且你有它:数组的第二个元素。

答案 3 :(得分:1)

你也可以使用正则表达式匹配斜杠之后但字符串结尾之前的所有内容,如下所示:

var text = "testpress/about";
var slug = text.match(/([^\/]+)\/?$/)[1];
//slug -> "about"

答案 4 :(得分:0)

我喜欢@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;
  };

这应该只返回slug而不是之后的任何东西。

JSBin:http://jsbin.com/sonowolise/edit?html,js,console