【问题标题】:regular expression to get the domain name in javascript?在javascript中获取域名的正则表达式?
【发布时间】:2015-03-03 20:56:04
【问题描述】:

我在使用正则表达式从 url 获取主域名时遇到问题。那就是如果我有下面给出的网址..

http://domain.com/return/java.php?hello.asp
http://www.domain.com/return/java.php?hello.asp
http://blog.domain.net/return/java.php?hello.asp
http://us.blog.domain.co.us/return/java.php?hello.asp
http://domain.co.uk
http://domain.net
http://www.blog.domain.co.ca/return/java.php?hello.asp
http://us.domain.com/return/

从这一切我应该只得到 domain 作为正则表达式的输出.. 那我该怎么做呢? 我用过;

var url = urls.match(/[^.]*.(com|net|org|info|coop|int|co\.uk|org\.uk|ac\.uk|uk)/g);

但它不适用于

  http://domain.net

所以有人可以帮我解决这个问题。

【问题讨论】:

  • 域可能以“/”或行尾结尾,所以“match(/[^.]*.(com|net|org|info|coop|int|co\.uk |org\.uk|ac\.uk|uk)(/|$)g)" 可能会起作用。
  • 似乎工作正常,regex101.com/r/dL6nN7/2jsbin.com/zanivonijo/1/edit?js,console 但我可能没有抓住重点?
  • @Fumu7: 你给的什么都行不通..
  • 不要忘记. 的转义符号,因为它是[^.]* 部分之后的特殊字符。 :)
  • @SusanWilliams 你找到解决方案了吗,或者你还需要帮助吗? :)

标签: javascript regex url


【解决方案1】:

您可以使用URL 而不是正则表达式

var url  = new URL("http://domain.com/return/java.php?hello.asp");
console.log(url.hostname);
=> domain.com

如果你也想要协议

var url  = new URL("http://domain.com/return/java.php?hello.asp");
console.log(url.protocol+"//"+url.hostname);
= > http://domain.com

【讨论】:

  • IE 支持是个问题。
【解决方案2】:
var url = urls.match(/[^./]*.(com|net|org|info|coop|int|co\.uk|co\.us|co\.ca|org\.uk|ac\.uk|uk)/g);

刚刚添加了/ 并更新了顶级域列表以匹配您的示例。
尽管我不建议将顶级域列表保留在正则表达式中。太多了。 http://en.wikipedia.org/wiki/List_of_Internet_top-level_domains

【讨论】:

    【解决方案3】:

    这会有帮助吗?

    (http|https|ftp):\/\/([a-zA-Z0-9.])+/g
    

    匹配于

    http://domain.com
    http://www.domain.com
    http://blog.domain.net
    http://us.blog.domain.co.us
    http://domain.co.uk
    http://domain.net
    http://www.blog.domain.co.ca
    http://us.domain.com
    

    【讨论】:

      【解决方案4】:

      这是一个稍微改变正则表达式的解决方案:

      url.match(/https?:\/\/[^/]+((?=\/)|$)/g);
      //tested with Chrome 38+ on Win7
      

      基本检查斜线/ 或字符串结尾$

      更新用内联 Stackoverflow-Code 替换了 jsFiddle 链接:

      var urls = ['http://domain.com/return/java.php?hello.asp',
        'http://www.domain.com/return/java.php?hello.asp',
        'http://blog.domain.net/return/java.php?hello.asp',
        'http://us.blog.domain.co.us/return/java.php?hello.asp',
        'http://domain.co.uk',
        'http://domain.net',
        'http://www.blog.domain.co.ca/return/java.php?hello.asp',
        'http://us.domain.com/return/'
      ];
      
      var htmlConsole = document.getElementById("result");
      var htmlTab = "    ";
      var htmlNewLine = "<br />";
      
      htmlConsole.innerHTML = "";
      for (var id in urls) {
      
        htmlConsole.innerHTML += "URL: " + urls[id] + htmlNewLine;
      
        var matchResults = urls[id].match(/https?:\/\/[^/]+((?=\/)|$)/g);
      
        for (var innerIdx in matchResults) {
          htmlConsole.innerHTML += htmlTab + "MatchNumber: " + innerIdx + " MatchValue: " + matchResults[innerIdx] + htmlNewLine;
        }
      
        htmlConsole.innerHTML += htmlNewLine;
      
      }
      <div id="result">
      </div>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-21
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        相关资源
        最近更新 更多