【问题标题】:How to get domain from a string using javascript regular expression如何使用 javascript 正则表达式从字符串中获取域
【发布时间】:2014-10-08 23:52:30
【问题描述】:

正如标题所示,我正在尝试使用 javascript 正则表达式从字符串中检索域。

取以下字符串:

String                                  ==>     Return
"google"                                ==>     null
"google.com"                            ==>     "google.com"
"www.google.com"                        ==>     "www.google.com"
"ftp://ftp.google.com"                  ==>     "ftp.google.com"
"http://www.google.com"                 ==>     "www.google.com"
"http://www.google.com/"                ==>     "www.google.com"
"https://www.google.com/"               ==>     "www.google.com"
"https://www.google.com.sg/"            ==>     "www.google.com.sg"
"https://www.google.com.sg/search/"     ==>     "www.google.com.sg"
"*://www.google.com.sg/search/"         ==>     "www.google.com.sg"

我已经阅读了"Regex to find domain name without www - Stack Overflow""Extract root domain name from string - Stack Overflow",但是它们太复杂了,所以我尝试编写自己的正则表达式:

var re = new RegExp("[\\w]+[\\.\\w]+");
/[\w]+[\.\w]+/
re.exec(document.URL);

它适用于 "google.com""www.google.com""www.google.com.sg",但返回 http"http://google.com/""http://www.google.com/" 等。

由于我是正则表达式的新手,我似乎无法弄清楚出了什么问题......有什么想法吗?

提前致谢!

【问题讨论】:

    标签: javascript regex string string-matching capturing-group


    【解决方案1】:

    使用这个正则表达式:

    /(?:[\w-]+\.)+[\w-]+/
    

    这是regex demo

    抽样:

    >>> var regex = /(?:[\w-]+\.)+[\w-]+/
    >>> regex.exec("google.com")
    ... ["google.com"]
    >>> regex.exec("www.google.com")
    ... ["www.google.com"]
    >>> regex.exec("ftp://ftp.google.com")
    ... ["ftp.google.com"]
    >>> regex.exec("http://www.google.com")
    ... ["www.google.com"]
    >>> regex.exec("http://www.google.com/")
    ... ["www.google.com"]
    >>> regex.exec("https://www.google.com/")
    ... ["www.google.com"]
    >>> regex.exec("https://www.google.com.sg/")
    ... ["www.google.com.sg"]
    

    【讨论】:

    • 天哪,谢谢!喜欢那个正则表达式,简短而甜蜜~虽然我仍在试图弄清楚它是如何工作的,哈哈......另外,>>> regex.exec("ftp://www.google.com") ... ["ftp.google.com"],你是怎么知道的?哈哈:)
    • 只是添加几位,域名也可能有连字符-,可能需要调整一下。
    • @pushpraj 我如何将它添加到正则表达式中?我不是很擅长正则表达式,所以是的......大声笑
    • @Unihedron 我还是不明白你是怎么做到的,想解释一下它是如何工作的?
    • @Cheejyg 我们想要匹配的是aaa.bbb(.ccc.ddd.eee...) 序列。我通过将字符引用为[\w-]+(任何单词字符或连字符)来做到这一点,将另一组作为带有点(?:[\w-]+\.)的字符,并对其进行量化以允许多次匹配。 +.
    【解决方案2】:

    您可以在 Javascript 中使用此正则表达式:

    \b(?:(?:https?|ftp):\/\/)?([^\/\n]+)\/?
    

    RegEx Demo

    【讨论】:

    • 作为用户注释,正则表达式捕获目标字符串。见this
    • 这个正则表达式并不真正起作用,因为硬编码httphttpsftp 等使得添加新方案变得非常繁琐和复杂。例如"file://www.example.com/" == \b(?:(?:https?|ftp|file):\/\/)?([^\/\n]+)\/? 等等..
    猜你喜欢
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    • 2019-05-02
    • 1970-01-01
    相关资源
    最近更新 更多