如何从JavaScript中的URL中删除"http://"

Pet*_*ter 44 javascript regex bookmarklet

我遇到了一个奇怪的情况.我正在编写一个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它正在加载窗口.以下是我当前的bookmarklet的外观:

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)+
Run Code Online (Sandbox Code Playgroud)

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

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

Fai*_*Dev 130

我认为考虑所有可能的协议会更好.

result = url.replace(/(^\w+:|^)\/\//, '');
Run Code Online (Sandbox Code Playgroud)

  • 这是一个非常糟糕的正则表达式..*? - 表示不匹配,但是/ g修饰符强制表达式多次应用(即删除所有找到的协议?).表达式也没有^匹配开头.更好的一个:/^.*?:嗯! (7认同)
  • @disjunction甚至忽略了你的评论,这正是为什么这个正则表达式是这样编写的,因为答案中清楚地说明了这一点. (6认同)
  • 请注意,在真实的网页中,相对协议`//`是一种常见做法https://www.paulirish.com/2010/the-protocol-relative-url/.所以我建议regexp`/^\/\/ | ^.*?:\ /\//`(你可以做得更好我确定) (2认同)

mat*_*sko 41

url = url.replace(/^https?:\/\//,'')
Run Code Online (Sandbox Code Playgroud)

  • `url.replace(/^(?:https?:\/\/)?(?:www\.)?/i, "").split('.')[0]` 这将处理 ` http`、`https` 和 `www` (5认同)
  • 小改进:`/ ^(https?:|)\ /\//` (2认同)

shy*_*yam 6

l.href.replace(/^http:\/\//, '')
Run Code Online (Sandbox Code Playgroud)