我需要JavaScript中使用的RegEx来匹配某些URL规则:
http
,https
,ftp
,ftps
或mailto:
开头(必需)www
是可选的a-z
,A-Z
,0-9
和一些特殊字符.:-/
都是由于我对RegEx不太熟悉,因此我尝试使用在答案(第二个答案@foufos)中找到的答案:What is a good regular expression to match a URL?
/^(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,})
现在此RegEx匹配我需要的所有链接,除了两个:
例如http://intranet/index.html
mailto:sample@sample.com
所以我尝试对其进行修改,并添加了mailto:
规则:
/^((http(s)?)|(ftp(s)?):\/\/(?: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,}|(mailto:){1}([\w\.]+)\@{1}[\w]+\.[\w]{2,})\s$/gm;
目前,有两件事不起作用:
此url
匹配:www.google.com
,但不应匹配,因为它必须以http
,https
,ftp
,{ {1}}或ftps
(必填)。我只是将mailto:
放在了?
之后,所以只有这才是可选的。为什么这不起作用?
此(s)
仍然不匹配:url
,但我认为,我对特殊字符http://intranet/index.html
有正确的规则。
测试:.:-/
的列表应匹配:
URL
https://www.sample.com
https://www.sample-sample.com
http://www.sample.com
http://www.sample-sample.com
https://sample-sample.com
http://sample-sample.com
,ftps://sample-sample.com
ftp://sample-sample.com
ftps://sample.sample.com:3000
ftp://sample.sample.com:3000
http://intranet/index.html
mailto:sample@sample.com
的列表不应匹配:
-URL
有输入吗?
答案 0 :(得分:0)
最简单的正则表达式:
^(((https?|ftps?):\/\/)|(mailto:))[a-zA-Z0-9\.:\/@-]*$
您可以在这里https://regex101.com/r/F1SqQo/1
它不会检查URL是否遵循所有规则,也不检查电子邮件地址的有效性。
答案 1 :(得分:0)
此正则表达式与您的字符串匹配,但不验证它们。这意味着-它仍然包括所有禁止使用的字符-例如昏迷。电子邮件不必带有@-它会查找非空格字符,直到每一行的末尾:
(?:(?:(?:(?:http(?:s)?)|(?:ftp(?:s)?)):\/\/)|(?:mailto:))[^\s]*