使用组 1,我得到了域的名称。但是组 2 不会获得域的UK
这是正则表达式中的代码: https://regex101.com/r/Svg7KY/1
First try: /^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)((?:[.,]w+))/gm
Second try: /^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)([,.](?=[^.,]*$)w+)/gm
nu.co.uk www.nu.co.uk http://www.nu.co.uk https://www.nu.co.uk
如果要捕获第二个捕获组中的uk
,则可以重复 0 次或多次,匹配一个点,后跟 1+ 个单词字符。
然后匹配一个点并捕获第 1 组中的最后一个单词字符
^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)(?:[.,]w+)*.(w+)
关于最后一部分(?:[.,]w+)*.(w+)
(?:
非捕获组[.,]w+
匹配点或逗号和 1+ 单词字符
)*
关闭组并重复 0+ 次.
匹配一个点(w+)
捕获组 2,匹配 1+ 单词字符
正则表达式演示
我查看了您提供的链接中的正则表达式。它与"uk"不匹配的原因是因为这些示例比其他示例具有更多的.w+
出现次数。您可以向最后一个组添加一个量词以使其工作:
^(?:https?://)?(?:[^@n]+@)?(?:www.)?([^.]+)((?:[.,]w+)){1,2}
另外,最后一个组的字符类中是否需要逗号?如果没有,您可以将正则表达式简化为:
^(?:https?://)?(?:[^@n]+@)?(?:w+)(?:.w+)+