Sublime Text批量替换URL域名需手动编写正则覆盖所有写法:必须启用正则模式(.*按钮),分三类匹配https?://、//及纯域名上下文,并用捕获组保留路径结构,替换后须人工核验CSS/HTML/JS中各类URL残留。

Sublime Text 里用正则批量替换 URL 域名,本质是字符串模式匹配,不是“智能识别链接”
Sublime Text 的查找替换不解析 HTML 或 CSS 语法,它只按文本匹配。所以 https://old.example.com/static/ 和 url("https://old.example.com/img/logo.png") 都得靠正则自己“抓出来”,不能指望它自动识别“这是个资源地址”。你写的正则必须覆盖所有实际出现的写法:带协议、不带协议、引号包裹、括号包裹、路径结尾有无斜杠等。
常见错误是只写 https?://old\.example\.com,结果漏掉 //old.example.com(协议相对 URL)或 old.example.com/static(纯域名+路径混写在 JS 字符串里)。
- 务必开启 正则模式(.* 按钮)和全文件匹配(Alt+Enter 或勾选 “In Selection” 外的范围)
- 测试时先用
Find All看命中的行数,确认没漏没多 - 如果项目含 Vue/JSX 模板,注意
v-bind:src="xxx"里的变量不会被匹配——那是运行时拼接,文本里根本没完整 URL
匹配常见静态资源 URL 的正则写法(含引号、括号、协议可选)
最稳妥的写法是分三类覆盖:https?://、//、以及未加协议但明显属于 CDN 路径的纯域名片段(如 old.example.com/css/)。推荐这个组合:
https?://old\.example\.com|//old\.example\.com|(?<=[\'\"(= ])old\.example\.com(?=[\'\"/ )\n;])
说明:
-
https?://old\.example\.com匹配http://和https://开头 -
//old\.example\.com匹配协议相对 URL(常见于 HTMLsrc和 CSSurl()) -
(?<=[\'\"(= ])是正向先行断言,确保前面是引号、左括号、等号或空格;(?=[\'\"/ )\n;])是正向后行断言,确保后面是引号、斜杠、右括号、换行、分号等——避免把myold.example.com也替换了 - 点号
.必须转义为\.,否则匹配任意字符
替换时保留路径、只换域名,用捕获组避免硬编码路径
直接写 https://cdn.newdomain.com 容易出错,因为原始 URL 结构不统一。更安全的做法是用捕获组提取“协议+域名”部分,再整体替换。例如:
查找:
(https?://|//)old\.example\.com(/[^\'\"\s)]*)?
替换:
\1cdn.newdomain.com\2
说明:
-
(https?://|//)捕获协议或双斜杠,存为\1 -
(/[^\'\"\s)]*)?可选地捕获第一个斜杠及后续非引号/空格/右括号的内容(即路径),存为\2 - 这样
https://old.example.com/js/app.js→https://cdn.newdomain.com/js/app.js,//old.example.com/css/style.css→//cdn.newdomain.com/css/style.css,old.example.com/images/(没匹配上,需另加规则) - 如果还有纯域名无协议无路径的情况(如
old.example.com单独成词),得额外加一条规则单独处理
替换后必须验证,尤其注意 CSS url()、HTML data-src、JS 字符串拼接
正则替换完别急着提交。CDN 切换失败最常见的不是域名没换,而是路径结构变了或缓存没清:
- CSS 里
url("old.example.com/a.png")如果引号类型不一致(单引号/双引号/无引号),你的正则可能漏掉一种;建议先全局搜url(再人工核对几处 - HTML 中
data-src、data-background等自定义属性里的 URL 不会被常规“图片/脚本”逻辑覆盖,得单独查 - JS 文件里如果有
const cdn = "old.example.com"; fetch(cdn + "/api")这种拼接,正则根本找不到——这种必须改源码 - 替换后打开浏览器开发者工具,过滤 Network 面板的
old.example.com,看是否还有残留请求;同时检查控制台是否有 404
真正麻烦的从来不是怎么写正则,而是怎么确认“所有地方都换干净了”。漏一个 background: url(//old.example.com/sprite.png),就可能导致某页图标全挂。


















