首页 > 解决方案 > RegEx 规则强制开始字符串并允许 Intranet 链接

问题描述

我需要在 JavaScript 中使用 RegEx 来匹配一些 URL 规则:

由于我对 RegEx 不太熟悉,因此我尝试使用在答案中找到的这个(第二个答案@foufos):什么是匹配 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,})

现在这个正则表达式匹配我需要的所有链接,除了两个:例如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应匹配的列表:

URL不应该匹配的列表:-www.google.com

有什么输入吗?

标签: javascriptregexurl

解决方案


此正则表达式匹配您的字符串,但不验证它们。这意味着 - 它仍然包括所有被禁止的字符 - 例如昏迷。电子邮件不必有@ - 它只是查找非空白字符,直到每行的末尾:

(?:(?:(?:(?:http(?:s)?)|(?:ftp(?:s)?)):\/\/)|(?:mailto:))[^\s]*

推荐阅读