使用正则表达式从子域中删除点

时间:2015-10-26 21:15:37

标签: javascript regex

这是匹配网址的regEx。

我想要的是删除子域之后的点(。)。

因此,如果我输入http://www.abc.xyz.def.com,我希望子域名为abc.xyz,但我得到abc.xyz.

我只想用这个正则表达式来做这件事。

^((https?):\/\/)?(www\.)?(([A-z0-9]+\.)*)([A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$

2 个答案:

答案 0 :(得分:2)

如果可以在子域名中至少要求2个字符,则可以按以下步骤操作:测试匹配组之后的点而不是结束时的点,并允许匹配组内的点为它们不是它的第一个或最后一个字符:

^((https?):\/\/)?(www\.)?([A-z0-9][A-z0-9\.]+[A-z0-9])\.([A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$

还要允许1个字符的子域名,添加?到比赛组的第二部分:

^((https?):\/\/)?(www\.)?([A-z0-9]([A-z0-9\.]+[A-z0-9])?)\.([A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$

编辑:

域之前的点现在在任何组之外,因此子域和域都不包含它。

答案 1 :(得分:0)

.www.后的捕获组移至下一组。您仍然可以将该.内的[]www.foo.bar..baz.com匹配,但在子域末尾不匹配,因为它在下一组中匹配(除非您有一个无效的域^((https?):\/\/)?(www\.)?([A-z0-9.]+)*(\.[A-z0-9]+\.[A-z]{2,4})(\/(.)*)?(\/?\?{0}|\/?\?{1}.*)$\ )。

for i in len(data):
    ....

DEMO