【问题标题】:regex to export a domain name from a link正则表达式从链接中导出域名
【发布时间】:2015-07-25 02:53:03
【问题描述】:

我浏览了标题相同的问题列表,但没有一个回答我的问题,所以我不得不创建一个新问题。

我正在尝试使用 js 中的正则表达式从字符串中获取域名。以下是一些示例:

  1. www.demo.com
  2. http://demo.co.uk/
  3. https://demo.com/foo.html?q=bar
  4. https://www.demo.com/foo.html?q=bar
  5. http://demo.co.uk/foo.html?q=bar
  6. http://www.demo.com/foo.html?q=bar
  7. www.demo.com.co
  8. demo.com
  9. demo.co.uk

以上所有都应该返回'demo'

我当前的正则表达式看起来像这样

(\/{2}www\.|\/{2}|www\.)([^\...\.?]+)\.

它通过了除了最后一个之外的所有情况,我厌倦了将另一个选项设置为 \0,但它仍然与最后一个测试不匹配。

您可以查看它与大多数here

【问题讨论】:

  • ([^.\s/]+)\.[^.\s]+(?:/|$) 是否足以满足您的需求?
  • 如果您在我提供的链接上使用您的正则表达式,您会发现它与 www.demo.com 和 www.demo.com.co 不匹配
  • 对。 ([^.\s/]+)\.[^.\s]+(?:\/|$|\s),那么。
  • 我问的原因是因为你不太清楚你的规则到底是什么。例如,对于demo.co.uk,您希望域是codemo.co,还是只是简单的demo
  • 你可能没有测试过它,因为它匹配域直到下一个链接的第一个字符,我也用你的例子更新了这个问题。

标签: javascript regex


【解决方案1】:

有你的正则表达式:

(^|www|http://|https://)+(\.)?(.+?)\.

说明:

(^|www|http://|https://) - 匹配任何wwwhttp://https:// 或无 (因此^

(\.)?可能有一个点(如果它以www开头)

(.+?)\. - 获取所有字符()直到下一个点。

使用 ($3) 获取域。

DEMO

【讨论】:

    【解决方案2】:
    ^(?:(https?):\/\/)?(?:([^:\/\s.]+)\.)?(([^:\/\s]+))(((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?)?$
    
    
    ^(?:(https?):\/\/)? http://
    (?:([^:\/\s.]+)\.)? subdomain.
    (([^:\/\s]+))       domain.com
    (((\/\w+)*\/)([\w\-\.]+[^#?\s]+)(.*)?(#[\w\-]+)?)?$ remaining
    

    http://regexr.com/3bf87

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-17
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多