【问题标题】:How to rewrite a PCRE regex searching for the subdomain to a Javascript regex?如何将搜索子域的 PCRE 正则表达式重写为 Javascript 正则表达式?
【发布时间】:2019-07-01 06:41:56
【问题描述】:

如何转换这个正则表达式(搜索子域)

http[s]?:\/\/(.*?)\..*\/

到 JavaScript / ECMAScript 正则表达式?

我想找到子域而不是整行。 在 PCRE 中,括号指定了我感兴趣的字符串部分,但在 JavaScript 中,这似乎不起作用。

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

https://regex101.com/r/fQT1zC/2

【问题讨论】:

  • 正则表达式有缺陷,但它在 PHP 中的工作方式与在 Javascript 中相同,无需更改语法
  • JS 中这个正则表达式有什么问题?
  • 看看这个演示 - regex101.com/r/fQT1zC/1
  • 但是,您的示例 2 也有效!它在页面主体中没有以相同的方式突出显示,但请查看右侧的面板。
  • 这只是 regex101 如何呈现结果的问题。如果您在右侧窗格中查看匹配信息,它们是相同的。

标签: javascript regex pcre


【解决方案1】:

我想答案是不需要重写。
它看起来只是一个显示问题。

但是为了获得更好的正则表达式结果,一个
这样可能会产生更好的结果:

/^http[s]?:\/\/(.*?)\.?([^\/.\r\n?]+\.[^\/.\r\n?]+)(?=\/|$)/mg

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

第 1 组获取子子域
第 2 组获得 TLD 和第一个子域。

可读版本:

 ^ 
 http s? ://
 ( .*? )                       # (1)
 \.? 
 ( [^/.\r\n?]+ \. [^/.\r\n?]+ )  # (2)
 (?= / | $ )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    相关资源
    最近更新 更多