最稳路径是正则匹配href/src url→替换为$1$2导出→清理空行和重复行;需utf-8编码,相对路径需人工补全,模板语法需另写规则,多文件须单批处理。

直接用 Notepad++ 提取网页文件里的所有 URL,最稳的路径不是靠“查找全部”再手动复制,而是用正则匹配 + 替换导出 + 行清理三步闭环。它不依赖插件,不调外部工具,原生就能跑通,但每一步的参数和顺序错一点,结果就漏掉一半。
用正则同时捕获 href 和 src 中的 URL
网页里真正可跳转的链接,90% 都藏在 href 和 src 属性里,而不是满屏找 http。盲目匹配 https?://[^\s]+ 会漏掉相对路径(如 /api/user、./img/logo.png),也会误抓注释或字符串里的假链接。
- 按
Ctrl + F→ 切到「查找」→ 勾选「匹配正则表达式」 - 输入:
href\s*=\s*["']([^"']+)["']|src\s*=\s*["']([^"']+)["'] - 注意:这个表达式用了两个捕获组,
href的值落在第 1 组($1),src的值落在第 2 组($2) - 如果文档含中文或 Unicode 字符,务必先确认编码是 UTF-8(菜单栏「编码」→「转为 UTF-8 编码」),否则引号匹配可能失败
用替换功能导出纯净 URL 列表
光高亮没用,要的是可复制的纯文本列表。关键在「替换为」字段填 ,而不是 或 单独一个——这样才能把两类链接都导出来,且不混入 HTML 标签或其他内容。
- 保持上面的正则不变,切到「替换」标签页
- 「替换为」填:
$1$2 - 点「全部替换」:原来整行 HTML 会变成只留 URL,每个 URL 单独成行(没匹配上的行变空)
- 接着
Ctrl + H→ 查找^\s*$(空行),替换为空,删掉所有空白行 - 最后菜单栏「编辑」→「行操作」→「删除重复行」,去重完成
处理相对路径和模板语法的现实缺口
这个正则能覆盖标准 HTML,但遇到现代前端框架或服务端模板时会失效——它不是 bug,是设计边界。别硬改正则去兼容所有语法,先判断你手头文件的真实来源。
- Vue/React 的绑定写法如
:href="url"、{% url 'xxx' %}不会被捕获,需另写规则(例如加(?::href|:src)\s*=\s*["']([^"']+)["']) - 提取出的
static/js/app.js这类相对路径,无法自动补全协议和域名,得人工加前缀或后续用脚本批量处理 - 若文件里混有 JS 字符串中的 URL(如
fetch("https://api.x")),需额外加一条正则:["']((?:https?|ftp)://[^"']+)["'],但要注意避免匹配到 JSON 值或注释 - 不建议在一个正则里堆砌所有情况,容易互相干扰;分两次查找+替换更可控
跨多个文件批量提取时的路径与过滤器陷阱
想从整个文件夹里提取所有 HTML 文件的 URL?Ctrl + Shift + F(在文件中查找)能查,但不能直接导出列表——它只输出命中行摘要,没法一键生成 URL 文件。必须配合单文件流程分批处理。
- 「查找目录」必须填绝对路径,例如
C:\project\pages,不能写./pages或留空 - 「文件过滤器」填
*.html;*.htm,注意是英文分号;分隔,逗号或空格会失效 - 勾选「包括子文件夹」才能递归搜索,否则只扫当前层
- 查完后,底部「查找结果」窗口里双击某条结果,会跳转到对应文件 → 此时再对该文件执行前面说的「正则替换导出」流程
- 别指望「在文件中查找」能直接替换出 URL 列表——它的替换是修改原文件内容,不是构造新数据流
真正卡住人的往往不是正则写不对,而是忘了相对路径要补全、忘了模板语法要另起炉灶、或者误以为「在文件中查找」能替代单文件清洗流程。Notepad++ 是个精准的手术刀,不是全自动流水线——用对位置,它快得离谱;用错场景,反而比写三行 Python 更费时间。











