”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 如何改进正则表达式以更有效地匹配 URL?

如何改进正则表达式以更有效地匹配 URL?

发布于2024-12-14
浏览:178

How Can I Improve My Regular Expression to Match URLs More Effectively?

用于匹配 URL 的改进正则表达式

尝试从用户输入中检测和解析 URL 时,使用有效的正则表达式至关重要。就您而言,虽然您当前的表达式捕获了某些网址格式,但它无法考虑缺乏明确协议方案的网址,例如 www.google.com。

修订的正则表达式

要解决此问题并确保全面的 URL 匹配,请考虑使用以下修订后的正则表达式:

^(?=\S{1,255}$)(https?://)?[-a-zA-Z0-9@:%._\ ~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\ .~#?&//=]*)

正则表达式剖析

  • 锚点:确保比赛开始并结束整个字符串。
  • 协议(可选):捕获可选的“http”或“https”协议方案。
  • Domain:匹配域名,包括子域和顶级域。
  • Port:捕获可选端口号(例如“:8080”)。
  • Path:捕获域后的任何路径信息(例如,“/index.html”)。
  • Query:捕获查询字符串参数(例如,“?name=John”)。
  • Fragment:捕获片段标识符(例如“#footer”)。

这个修改后的正则表达式是限制较少,将成功匹配 www.google.com 等网址以及具有显式协议的网址(例如 http://www.stackoverflow.com)。

示例实现 (JavaScript)

const regex = new RegExp(/(?=\S{1,255}$)(https?://)?[-a-zA-Z0-9@:%._\ ~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\ .~#?&//=]*)g);
const url = 'www.google.com';

if (url.match(regex)) {
  console.log("URL successfully matched.");
} else {
  console.log("URL did not match.");
}
最新教程 更多>

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3