我尝试用JS中的正则表达式匹配域名的根。当路径本身不是 www。时,我会遇到问题。
例如,我尝试从此字符串进行匹配:
(http://web.archive.org/web/20080620033027/http://www.mrvc.indianrail.gov.in/overview.htm)
多数民众赞成在正则表达式我尝试如下。我在regex101.com
上尝试了他/(?<=(\/\/(www\.)|\/\/)).+?(?=\/)/g
我希望输出数组的名称为web.archive.org
和mrvc.indianrail.gov.in
,但在第二种情况下,通过 www。获得web.archive.org
和www.mrvc.indianrail.gov.in
。 >
答案 0 :(得分:1)
该正则表达式如何:
(?<=https?:\/\/(?:www\.)?)(?!www\.).+?(?=\/)
它匹配web.archive.org
和mrvc.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\.)?(.+?)\/