Tôi đã gặp phải tình huống kỳ lạ. Tôi đang viết một bookmarklet JavaScript cho phép người dùng nhấp và chia sẻ các trang web bên ngoài vào trang web của chúng tôi rất dễ dàng và nhanh chóng. Nó chỉ đơn giản là lấy tiêu đề, URL trang và nếu họ đã chọn bất kỳ văn bản nào trên trang, nó cũng sẽ lấy nó.Cách xóa 'http: //' khỏi URL trong JavaScript
Vấn đề là nó không hoạt động với lĩnh vực bên ngoài đối với một số lý do, vì vậy nếu chúng ta sử dụng nó trong nội bộ chúng tôi kết thúc với một cửa sổ chia sẻ với URL được định dạng như thế này:
http://internaldomain.com/sharetool.php?shareid=http://internaldomain.com/anotheroddpage.html&title= ....
Đó chỉ hoạt động tốt, nhưng nếu chúng ta cố gắng sử dụng một miền bên ngoài và kết thúc với một URL được định dạng như thế này:
Sau đó chúng ta có được một Forbidden Er ror trên trang của chúng tôi và không thể tải nó ... Nếu chúng tôi tự xóa http://
khỏi địa chỉ externaldomain, nó sẽ tải lại một lần nữa.
Vì vậy, tôi nghĩ giải pháp tốt nhất để giải quyết vấn đề này là sửa đổi bookmarklet JavaScript để xóa http
vì nó đang tải cửa sổ. Sau đây là cách bookmarklet hiện tại của tôi trông:
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)+
Như bạn thấy, e(l.href)
là nơi mà các URL được thông qua.
Làm cách nào tôi có thể sửa đổi để xóa miền bên ngoài http://
?
đó đã làm việc như một say mê '+ e (l.href.replace (/.*?:\/\//g, "") – Peter
Đây là một regex rất nghèo. *? - có nghĩa là không phù hợp, nhưng/g modifier buộc biểu thức được áp dụng nhiều lần (tức là cắt tất cả các giao thức tìm thấy Ngoài ra biểu thức không có^để phù hợp với sự bắt đầu tốt hơn một: /^.*?:\/\// – disjunction
@ disjunction Ngay cả bỏ qua ý kiến của bạn, đó là chính xác lý do tại sao regex này được viết như thế này, vì điều này rõ ràng đã nêu trong phần trả lời r. – FailedDev