用正则表达式href\s*=\s*["']([^"']+)["']|src\s*=\s*["']([^"']+)["']可同时匹配href和src中的URL,分别捕获至第1组和第2组,配合替换为$1$2、删空行、去重,即可快速提取纯净URL列表。

用正则表达式匹配 href 和 src 中的 URL
Notepad++ 自带的「查找」功能配合正则表达式,是提取网页中 URL 最快的方式。关键不是找「http」开头的字符串,而是定位 HTML 标签里真正被使用的链接地址——主要在 href 和 src 属性中。
实际操作时,打开 Notepad++ → Ctrl + F → 切换到「正则表达式」模式(勾选「匹配正则表达式」),然后输入:
href\s*=\s*["']([^"']+)["']|src\s*=\s*["']([^"']+)["']
这个表达式能同时捕获两类属性值,并把 URL 提取到第 1 组或第 2 组。但注意:src 匹配结果会出现在第 2 组,href 在第 1 组,后续替换或导出时需留意分组顺序。
- 确保文档编码为 UTF-8(菜单栏「编码」→「转为 UTF-8 编码」),否则中文路径或特殊符号可能匹配失败
- 如果网页用了 Vue/React 的绑定语法如
:href="url"或{% url 'xxx' %},这个正则不覆盖,得另写规则 - 部分 URL 是相对路径(如
/static/js/app.js),提取后需人工补全协议和域名
用「替换」功能批量提取并去重
单纯查找只能高亮,要导出纯 URL 列表,得用「替换」功能把整行替换成只留 URL,并过滤空行和重复项。
在「查找」对话框中保持上面的正则不变,切换到「替换」标签页,在「替换为」框中填:
$1$2
点击「全部替换」后,所有 href 和 src 值会单独成行(其他 HTML 内容被清空)。接着执行:
-
Ctrl + H → 查找
^\s*$(空行),替换为空,删掉空白行 - 菜单栏「编辑」→「行操作」→「删除重复行」,去掉重复 URL
- 如果需要导出,全选 → Ctrl + C → 粘贴到新文件保存即可
遇到 JavaScript 动态拼接 URL 怎么办
像 location.href = '/login?from=' + window.location.pathname 这类代码,正则无法识别变量拼接逻辑,href 属性根本不存在,自然不会被上一步正则捕获。
这种场景没有全自动方案,但可以缩小范围快速筛查:
- 先用查找功能搜关键词:
location.href、window.open(、document.location、fetch(、axios.get( - 对匹配行手动检查字符串字面量(即单引号/双引号包裹的部分),注意拼接符
+和模板字符串` - 如果项目用 Webpack/Vite,真实请求地址可能在
import.meta.env或配置文件里,不在 HTML 源码中
为什么不用「文本抓取」插件或外部工具
Notepad++ 插件如「TextFX」或「Python Script」确实能写更复杂的提取逻辑,但安装、配置、调试成本远高于原生正则。而且多数插件依赖 Python 2.7 或特定版本,Win11 新系统常报错 ImportError: No module named _winreg。
如果你只是临时处理一个 HTML 文件,坚持用内置功能更稳:
- 避免插件兼容性问题(尤其 Notepad++ 8.x 后插件体系已大幅调整)
- 不依赖外部运行时(比如 Node.js 脚本还要装 npm 包)
- 所有操作可逆:替换错了按 Ctrl + Z 就能回退
真正容易被忽略的是 URL 编码问题——比如 https://example.com/search?q=%E4%BD%A0%E5%A5%BD 这种含中文的链接,正则能提取出来,但直接点击或复制进浏览器前,得确认是否需要解码;Notepad++ 本身不提供 URL 解码功能,得靠在线工具或 Python 的 urllib.parse.unquote() 补处理。

















