【问题标题】:How to remove the last two parts from a URL?如何从 URL 中删除最后两个部分?
【发布时间】:2017-08-02 09:08:17
【问题描述】:

我有以下网址:http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b

我想删除最后两部分,所以这会产生:http://myshop.dev/member/message/inbox

我试过这样:

var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
var arrVars = vars.split("/");
var lastVar = arrVars.pop();
var restVar = arrVars.join("/");
console.log(restVar);

它只成功删除了最后一部分。

我想再删除一个部分。

我该怎么做?

【问题讨论】:

标签: javascript jquery


【解决方案1】:

你为什么不简单地使用子字符串函数:

if (vars.toLowerCase().indexOf("/detail/")!=-1)
    restVar = vars.substring(0,vars.toLowerCase().indexOf("/detail/"))

我认为它可以让你更好地控制你正在做的事情。

【讨论】:

    【解决方案2】:

    再次弹出它。 :)

    var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
    var arrVars = vars.split("/");
    arrVars.pop();
    arrVars.pop();
    var restVar = arrVars.join("/");
    console.log(restVar);
    

    或者你可以只使用拼接:

    var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
    var arrVars = vars.split("/");
    arrVars.splice(-1,2)
    var restVar = arrVars.join("/");
    console.log(restVar);
    

    【讨论】:

      【解决方案3】:

      您可以pop 两次,但还有其他解决方案。

      例如,将数组的长度减少 2 具有相同的效果:

      arrVars.length -= 2;
      

      var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
      var arrVars = vars.split("/");
      arrVars.length -= 2;
      var restVar = arrVars.join("/");
      console.log(restVar);

      但也许可以考虑使用正则表达式:

      vars.match(/(.*)\/.*\//)[1]
      

      这就是说:尽可能多地抓住,只要后面还有两个正斜杠。

      var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
      var restVar = vars.match(/(.*)\/.*\//)[1];
      console.log(restVar);

      请注意,输入应该是有效的 URL。如果您的字符串中没有两个正斜杠,这将引发异常。如果需要处理,又不喜欢try...catch,那么先测试match结果是否不是null,然后才能获取抓包内容:

      var restVar = vars.match(/(.*)\/.*\//);
      restVar = restVar && restVar[1];
      

      【讨论】:

        【解决方案4】:

        您可以像这样使用splice()slice() 而不是两次调用pop()

        splice() - w3schools docs

        var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
        var arrVars = vars.split("/");
        
        // remove desired # of URL pieces here in 2nd parameter:
        arrVars.splice(-2, 2);
        var restVar = arrVars.join("/");
        

        slice() - w3schools docs

        var vars = "http://myshop.dev/member/message/inbox/detail/58c4fad6607a1d16f0006b3b";
        var arrVars = vars.split("/");
        var arrLength = arrVars.length;
        
        // remove desired # of URL pieces here:
        var arrVars = arrVars.slice(0, arrLength - 2);
        var restVar = arrVars.join("/");
        

        【讨论】:

        • 这是使用splice 的错误方式,它本身已经改变了arrVars。要么使用slice,要么使用splice而不捕获返回值,但当然可以使用不同的参数值。
        猜你喜欢
        • 1970-01-01
        • 2015-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-05
        相关资源
        最近更新 更多