代码之家  ›  专栏  ›  技术社区  ›  jamesmhaley

Javascript/Regex用于只查找根域名而不查找子域

  •  12
  • jamesmhaley  · 技术社区  · 14 年前

    我搜索了一下,找到了很多类似的regex示例,但不完全是我需要的。

    我希望能够传入以下URL并返回结果:

    • 退货 google.com

    • sub.domains.are.cool.google.com 退货

    • doesntmatte公司rhowlongasubdomainis.idont.wantit.google.com google.com

    • 退货 google.com

    希望有意义:) 提前谢谢-詹姆斯

    4 回复  |  直到 14 年前
        1
  •  10
  •   Tatham Oddie    14 年前

    不能用正则表达式执行此操作,因为您不知道后缀中有多少块。

    例如 google.com 后缀为 subdomain.google.com google.com 谷歌 .

    尽管你最终会 co.uk .

    http://publicsuffix.org/

        2
  •  9
  •   stormsweeper    14 年前

    不要使用regex,使用.split()方法并从那里开始工作。

    var s = domain.split('.');
    

    如果您的用例相当狭窄,则可以根据需要检查TLD,然后根据需要返回最后2或3个段:

    return s.slice(-2).join('.');
    

    它会让你的眼睛流血比任何正则表达式解决方案。

        3
  •  1
  •   theraccoonbear    14 年前

    ([A-Za-z0-9-]+\.([A-Za-z]{3,}|[A-Za-z]{2}\.[A-Za-z]{2}|[A-za-z]{2}))\b
    

    编辑:

    为了澄清,它正在寻找:

    然后三件事之一。。。

    1. 三个或更多字母字符(即com/net/mil/coop等)
    2. 两个字母字符,后跟一个文字点,后跟两个以上的字母(即。co.uk)
    3. 两个字母字符(即us/uk/to等)

    最后是单词边界(\b),表示字符串的结尾、空格或非单词字符(在正则表达式中,单词字符通常是字母数字和下划线)。

        4
  •  1
  •   Gajus    9 年前

    (([a-z\-]+)(?:\.com|\.fr|\.co.uk))
    

    www.google.com --> google.com
    www.google.co.uk --> google.co.uk
    www.foo-bar.com --> foo-bar.com
    

    在我的例子中,我知道所有相关的url都将使用这个regex进行匹配。

    https://regex101.com/r/aG9uT0/1

        5
  •  0
  •   Emeka    4 年前

    domain = 'sub.domains.are.cool.google.com'
    
    s = domain.split('.')
    
    tld = s.slice(-2..-1).join('.')
    

    编辑:小心三部分TLD的问题,如domain.co.uk.