【问题标题】:How to remove 'http://' from a URL in JavaScript [duplicate]如何从 JavaScript 中的 URL 中删除“http://”[重复]
【发布时间】:2012-01-02 14:59:40
【问题描述】:

我遇到了一个奇怪的情况。我正在编写一个 JavaScript 小书签,它允许用户非常轻松快捷地单击外部网站并将其共享到我们的网站。它只是获取标题、页面 URL,如果他们选择了页面上的任何文本,它也会抓取它。

问题是由于某种原因它不适用于外部域,所以如果我们在内部使用它,我们最终会得到一个 URL 格式如下的共享窗口:

http://internaldomain.com/sharetool.php?shareid=http://internaldomain.com/anotheroddpage.html&title=....

这很好,但是如果我们尝试使用外部域并最终得到一个格式如下的 URL:

http://internaldomain.com/sharetool.php?shareid=http://externaldomain.com/coolpagetoshare.html&title=...

然后我们的页面上出现Forbidden Error,并且无法加载它...如果我们手动从外部域地址中删除http://,它会再次正常加载。

所以.. 我认为解决此问题的最佳解决方案是修改 JavaScript 小书签以在加载窗口时删除 http。这是我当前的书签的外观:

javascript:var d=document,w=window,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),f='http://internaldomain.com/sharetool.php',l=d.location,e=encodeURIComponent,u=f+'?u='+e(l.href)+

如您所见,e(l.href) 是传递 URL 的位置。

如何修改它以删除外部域http://

【问题讨论】:

    标签: javascript regex bookmarklet


    【解决方案1】:
    url = url.replace(/^https?:\/\//, '')
    

    【讨论】:

    • 小改进:/^(https?:|)\/\//
    • 非常感谢,为了更容易使用:let removeHttp = function(link) { return link.replace(/^(https?:|)\/\//, ''); }; let string = removeHttp(link);
    • url.replace(/^(?:https?:\/\/)?(?:www\.)?/i, "").split('.')[0] 这将处理 httphttpswww
    【解决方案2】:

    我认为您需要的正则表达式是/(?:http://)(.*)/i。第一场比赛应该就是它了。

    【讨论】:

      【解决方案3】:
      l.href.replace(/^http:\/\//, '')
      

      【讨论】:

        【解决方案4】:

        我认为最好考虑所有可能的协议。

        result = url.replace(/(^\w+:|^)\/\//, '');
        

        【讨论】:

        • 这就像一个魅力 '+e(l.href.replace(/.*?:\/\//g, "")
        • 这是一个非常糟糕的正则表达式。 .*? - 表示不贪婪的匹配,但 /g 修饰符强制多次应用表达式(即剪切所有找到的协议?)。表达式也没有 ^ 来匹配开头。更好的一个:/^.*?:\/\//
        • @disjunction 即使忽略你的 cmets,这正是这个正则表达式写成这样的原因,因为答案中明确说明了这一点。
        • 请注意,在实际网页中,相关协议// 是一种常见做法paulirish.com/2010/the-protocol-relative-url。所以我建议正则表达式/^\/\/|^.*?:\/\//(我敢肯定你可以做得更好)
        • @Dan,好电话!因此,让我们更进一步,使用 'mailto:' 进行编辑:.replace(/^\/\/|^.*?:(\/\/)?/, '');
        【解决方案5】:

        尝试使用replace函数

        var url = url.replace("http%3A%2F%2F", "");
        

        【讨论】:

        • 这对于缺少正则表达式的使用是不理想的。通过像这样的简单文本替换,您需要链接多个 .replace() 函数调用以适应所需的所有不同变化(http/https/ etcetera..)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-07-12
        • 2015-06-02
        • 2011-03-31
        • 2012-04-16
        • 1970-01-01
        • 2020-10-14
        • 1970-01-01
        相关资源
        最近更新 更多