【问题标题】:Replace a part of the current URL替换当前 URL 的一部分
【发布时间】:2014-08-08 04:47:16
【问题描述】:

我想在 404 页面上添加修改后的链接,因为我将永久链接结构从 domain.tld/category/title 移动到了 domain.tld/title。 现在,当访问者找到指向 domain.tld/category/title 的旧链接时,她/他将看到 404 页面,并且应该有指向 domain.tld/title 的动态链接。 如果 window.location.href 包含五个“/”,则应该生成此链接(因为http://www.domain.tld/category/title/ 有五个“/”,而我的新永久链接结构不会有五个“/”而只有四个“/”。 我知道我可以用此代码替换(删除)类别部分:

function geturl(){
 var url = window.location.href;
 alert(url.replace('/category/', '/'));
}

问题在于我必须定义一个静态类别名称,但它可以是任何名称。 window.location.href中有五个“/”时如何动态去掉/category/部分?

【问题讨论】:

  • 听起来像是应该由网络服务器重定向的东西..
  • 丑陋的解决方案:url.replace(/\/\/(.+)\/(.+)\/(.+)\//,"//$1/$3");

标签: javascript


【解决方案1】:

给你:

function geturl(url){
    if (typeof url === 'string'){
        var a = document.createElement('a');
        a.href = url;
        url = a.pathname;
    }
    else url = window.location.pathname;
    alert(url.replace(/^\/[^\/]+\//, '/'));
}

使用geturl('your url') 调用此函数。如果没有传递 url,它将使用页面的当前 url。正则表达式将替换 URL 路径部分开头的字符串,该字符串位于 2 个 / 字符内。

【讨论】:

  • ...在哪里解释? (对不起,假设“donde esta”的西班牙文足以让人理解。;)我的错!)
  • 不是我,但可能是因为您在开头有一个^(它不会匹配任何window.location.href
  • 收回我的反对票,因为这现在有效,但我仍然认为它不能完全回答问题,因为网址包含多少段没有条件。
  • 我刚刚意识到 OP 的意思是 4 和 5 作为 URL 中的斜杠总数
【解决方案2】:

它将从 url 中删除类别

 function geturl(){
     var url = window.location.pathname; // get url from browser
    // var url = 'http://www.domain.tld/category/title/'; // get url from browser
     var url_array = url.split('/category/');
     var newurl = url_array[0]+"/"+url_array[1];
     alert(newurl);
    }

【讨论】:

    【解决方案3】:

    前言:正如Mike 提到的那样,这确实应该由网络服务器(而不是您的网页)处理。


    RegExPal 似乎同意这一点:

    var url = "http://www.domain.tld/category/title/";
    
    url.replace(/\/[^/.]+?\//, "");
    

    注意:在 RegExp 中不包含“g”将只允许替换第一个实例。


    话虽如此,您不需要 RegEx。你可以只split 然后join URL:

    var parts = x.split("/");
    parts.splice(3,1);
    window.location.href = parts.join("/");
    

    【讨论】:

    • 谢谢@DJDavid98!复制粘贴不正确。 :) 更新了。
    猜你喜欢
    • 2019-09-06
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2017-01-15
    • 1970-01-01
    • 2018-12-18
    • 1970-01-01
    相关资源
    最近更新 更多