网址正则表达式中双点的情况

时间:2018-08-02 09:49:23

标签: javascript regex url

(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//="]*)

regex101.com/r/vd3hHQ/1

我正在使用上面的正则表达式来检测输入文本中的网址。它通过了wealth.in..mutual的情况,但取而代之的是wealth.in。 我需要在正则表达式的最后部分放置点的最大连续出现次数。

以前,我在使用

(?:(?:https?|ftp):\/\/|\b(?:[a-z\d]+\.))(?:(?:[^\s()<>$@,]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))?\))+(?:\((?:[^\s()<>]+|(?:\(?:[^\s()<>]+\)))?\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))

2 个答案:

答案 0 :(得分:0)

试试这个。它将检查有效的网址。

(https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9]\.[^\s]{2,}|https?:\/\/(?:www\.|(?!www))[a-zA-Z0-9]\.[^\s]{2,}|www\.[a-zA-Z0-9]\.[^\s]{2,})

答案 1 :(得分:0)

这是一个最小的重构,它从巨大的字符范围中排除了点,并重新排列了周围的内容。 (包裹在多行中,以便我可以对更改内容进行评论。)

# Beginning is the same as before
(http(s)?:\/\/.)?(www\.)?
# Here, we exclude dot, and then allow it separately,
# and repeat one or more times.
# Also, DNS labels can be at most 63 characters
(?:[-a-zA-Z0-9@:%_\+~#=]{1,63}\.)+
# Same as before
[a-z]{2,6}\b
# A similar refactoring occurred here
((?:[-a-zA-Z0-9@:%_\+~#?&//="]+\.)*
# Same as before
[-a-zA-Z0-9@:%_\+~#?&//="]+)?

Regex101演示:https://regex101.com/r/zRTeTI/2

否则,我没有对此进行审查;通常,您在互联网上找到的URL正则表达式是一种或另一种缺陷,因此请谨慎操作。例如,这似乎至少在IDNA TLD上仍然失败。