匹配网址时最容易忽略的是协议与主机名结构。下面这条规则要求 http/https 协议且主机名至少包含一个点号。
默认正则
/^https?:\/\/[\w.-]+(?:\.[\w.-]+)+[\w\-._~:/?#\[\]@!$&'()*+,;=%]*$/
匹配以 http:// 或 https:// 开头、含主机名与可选路径/查询的网址。
URL 由协议、主机、端口、路径、查询与片段组成。工程校验通常只强制协议与主机名结构,其余部分放宽。
^https?:\/\/ 表示 http 或 https;主机名由字母数字、点与连字符组成且至少一个点号;后面允许常见 URL 字符。
该规则不校验域名合法性,也不覆盖 ftp、file 等协议;如需严格校验,可改用 URL 解析 API。
https://www.example.comhttp://a.b.c/path?x=1#tophttps://xingdian.net/app/regex/www.example.comftp://example.comhttp://localhostQ:为什么裸域名 www.example.com 不匹配?
规则要求以 http:// 或 https:// 开头。若也要匹配裸域名,可把协议部分改为 (?:https?:\/\/)?。
Q:localhost 为什么不匹配?
规则要求主机名至少包含一个点号。如需匹配 localhost 或内网主机,请调整主机名部分。
Q:如何同时校验 URL 是否可达?
正则可校验格式,但可达性需要实际发起请求,浏览器端会受跨域限制。
Q:提取文本中的链接怎么做?
去掉 ^ 与 $,并在“搜索/提取”模式中使用,即可从长文本中找出全部链接。