16

我只想从引荐来源网址获取域。我最常得到的引荐网址是http://www.davidj.com/pages/flyer.asp&http://www.ronniej.com/linkdes.com/?adv=267&loc=897

每当我得到像上面这样的引荐网址时,我只想获取域示例:http ://www.davidj.com

我曾尝试使用 .split 方法,但我无法使用它。

4

7 回答 7

19
var url = "http://www.ronniej.com/linkdes.com/?adv=267&loc=897"
var referrer =  url.match(/:\/\/(.[^/]+)/)[1];

http://jsfiddle.net/hyjcD/

if (document.referrer) {
   url = document.referrer; 
   ref = url.match(/:\/\/(.[^/]+)/)[1];
}
于 2012-04-25T13:50:27.483 回答
10

您可以在内部使用将 url 写入锚元素,然后从该元素中获取较小的部分

var anchor = document.createElement("a");
anchor.href = "http://www.davidj.com/pages/flyer.asp";

console.log(anchor.protocol + "//" + anchor.host); // "http://www.davidj.com"

这要容易得多,因为您不必关心拆分或类似的事情……这很合乎逻辑……本机锚具有相同的属性window.location,至少在 URL 方面

编辑:IE 6-9 将默认端口添加到 anchor.host // "http://www.davidj.com:80

于 2012-04-25T13:49:17.203 回答
9

尝试使用 JS 原生 URL 接口来处理 URL 字符串:

let domain = (new URL(document.referrer)).hostname;

参考:https ://developer.mozilla.org/en-US/docs/Web/API/URL

于 2018-10-17T08:55:42.273 回答
5

链式拆分、切片和连接:

document.referrer.split("/").slice(0,3).join("/")
于 2012-04-25T13:49:09.810 回答
0

您可以使用正则表达式:

var matchHost = /^https?:\/\/.*\//;

var match = matchHost.exec('http://www.davidj.com/pages/flyer.asp');
if(match) {
    var host = match[0];
    console.log(host);
}
于 2012-04-25T13:51:04.360 回答
0
if (document.referrer.split('/')[2] == "domain") {
    //................
}                              
于 2014-06-02T11:42:12.663 回答
0

从引用字符串获取协议 + 域的唯一答案是:

document.referrer.split("/").slice(0,3).join("/").split("?").slice(0,1).join("?")

如果存在,则需要第二次拆分以删除查询字符串:http ://www.example.com?s=search

它适用于:

  1. http://....
  2. https://....
  3. http://www.example.com
  4. http://www.example.com/
  5. http://www.example.com/aaa/bbb/ccc ....
  6. http://www.example.com?s=search&t=time
  7. http://www.example.com/?s=search&t=time
于 2020-05-29T20:08:08.983 回答