我如何不使用www就能匹配域名的根。使用正则表达式

时间:2019-04-07 23:37:36

标签: javascript regex match

我尝试用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。 >

2 个答案:

答案 0 :(得分:1)

该正则表达式如何:

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

它匹配web.archive.orgmrvc.indianrail.gov.in而没有www.

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

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

  • 在您的积极向后看条款中,我有s?支持https: URL(如有必要,请将其删除)
  • (?:www\.)?可以出现0到1次

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

答案 1 :(得分:0)

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

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

因为两个单词的第一个和第二个字符已经在第二个字符处与12组匹配,所以无需检查第三个字符。

我认为您的目的是首先对整个单词(123)应用123组,而忽略12组,因为123组已经匹配。

我建议不要使用环视,然后像下面这样获得第一个组($ 1):

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

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