如何在没有 www 的情况下匹配域名的根.使用正则表达式



我尝试将域名的根与JS中的正则表达式匹配。当路径没有 www. 在他自己身上时,我有一个问题。

例如,我尝试从这个字符串匹配:

(http://web.archive.org/web/20080620033027/http://www.mrvc.indianrail.gov.in/overview.htm)

这就是我尝试的正则表达式,如下所示。我试穿他 regex101.com

/(?<=(//(www.)|//)).+?(?=/)/g

我希望输出数组的名称为 web.archive.orgmrvc.indianrail.gov.in,但在第二种情况下使用 www 获得web.archive.orgwww.mrvc.indianrail.gov.in

这个正则表达式呢:

(?<=https?://(?:www.)?)(?!www.).+?(?=/)

它匹配web.archive.org和没有www.mrvc.indianrail.gov.in

演示:https://regex101.com/r/5ZqK7n/3/

与初始正则表达式的区别:

  • 在您的正面回溯条款中,我s?支持https: URL(如果没有必要,请将其删除(
  • (?:www.)?可以出现 0 到 1 次

  • 在后视之后,您添加了一个负的预(?!www.)不匹配,以避免您的.+?与初始www.匹配

首先,您必须了解正则表达式如何匹配。

如果设置 or(|( 组,则每个字符都匹配整个组。例如,输入123 122,模式(123|12)。第二组 (12( 总是与两个单词同时匹配。

由于这两个单词的第一个和第二个字符12第二个字符与第二个字符的组匹配,因此无需检查第三个字符。

我认为您的目的是首先将123组应用于整个单词(123(,并忽略12123因为该组已经匹配。

我建议不要使用"向后看",并像下面这样获得第一组($1(:

//(?:www.)?(.+?)/

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

最新更新