如何在JavaScript中从URL中删除'http://'

83

我遇到了奇怪的情况。我正在编写一个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://

5个回答

224
我认为考虑所有可能的协议会更好。
result = url.replace(/(^\w+:|^)\/\//, '');

7
这是一个非常糟糕的正则表达式。".?"表示非贪婪匹配,但"/g"修饰符强制表达式多次应用(即剪切所有发现的协议?)。此外,该表达式没有"^"来匹配开头。更好的正则表达式是:"/^.?:///"。 - disjunction
6
即使不考虑你的评论,这就是为什么这个正则表达式被写成这样的原因,因为这在答案中明确说明了。 - FailedDev
2
请注意,在实际的网页中,相对协议“//”是一种常见做法 https://www.paulirish.com/2010/the-protocol-relative-url/。因此,我建议使用正则表达式 /^\/\/|^.*?:\/\//(您可以改进它,我相信)。 - Dan
@Dan,做得好!所以让我们更进一步,使用这个编辑器使它与 "mailto:"一起工作:.replace(/^\/\/|^.*?:(\/\/)?/, ''); - gdibble
一个问题,为什么在这个正则表达式中需要一个替代项呢? 为什么不只是 (^\w+:|^) - Rahul
显示剩余3条评论

59
url = url.replace(/^https?:\/\//, '')

3
小改进:/^(https?:|)\/\// 的翻译是“以 https:http: 或空字符串开头,后跟两个斜杠”。 - Artem P
非常好,谢谢。为了更方便使用: let removeHttp = function(link) { return link.replace(/^(https?:|)///, ''); };let string = removeHttp(link); - Edgar Quintero
8
这段代码的作用是去除URL中的协议和子域名,并获取主域名。它适用于处理httphttpswww开头的URL。 - SirPhemmiey
@SirPhemmiey 不,那最终把我的子域名也删除了。 - dem

7
l.href.replace(/^http:\/\//, '')

2
我认为你需要的正则表达式是/(?:http:\/\/)(.*)\/i<\/code>。第一个匹配应该就是它。

-6

尝试使用replace函数

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

这种方法不太理想,因为缺乏正则表达式的使用。对于像这样的简单文本替换,您需要链接多个.replace()函数调用来适应所有所需的不同变体(http/https/等等..)。 - gdibble

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接