推荐正则:@media1{(?:2|{2})*},可匹配单层嵌套的@media块,需启用正则模式,但无法处理注释、字符串中的{或深度嵌套。{ ↩{} ↩

怎么写正则匹配所有 @media 规则块(含嵌套)
Sublime Text 无法真正解析 CSS 嵌套结构,所谓“提取媒体查询”,本质是用正则尽可能捕获从 @media 开始、到对应闭合大括号 } 结束的完整块。关键不是追求 100% 安全,而是控制匹配边界,避免跨规则误吞。
推荐正则:@media[^{]*\{(?:[^{}]|{[^{}]*})*\}
- 必须启用
Regular Expression(.* 按钮亮起),否则{和|会被当字面量处理 -
(?:[^{}]|{[^{}]*})*是非捕获组 + 非贪婪递归模拟,能处理单层嵌套(如@media (min-width: 768px) { @supports (...) { ... } }),但不支持多层深度嵌套 - 若 CSS 中有注释
/* ... */或字符串字面量含{,该正则会失效——此时应先清理或换工具 - 测试时建议先在小文件上试,用
Find All看高亮是否连贯,断开即说明正则越界
Find All 后怎么只保留匹配块、去掉前后无关内容
直接 Find All 只会选中匹配文本本身,但常混着空行、缩进、甚至相邻规则的末尾括号。要干净提取,得靠两步:先整块选中 → 再用 Ctrl+L(Windows/Linux)或 Cmd+L(macOS)扩展为整行选择 → 最后 Ctrl+Shift+L 转为多光标编辑模式,手动删掉多余空行和缩进前缀。
- 别依赖
Alt+Enter:它只选中正则匹配部分,对跨多行的@media块无效 - 如果块首行前面有空行,
Ctrl+L会把那行也拉进来;可先按Ctrl+Shift+K删除空行再操作 - 批量去缩进:选中所有块后,按
Ctrl+Shift+P→ 输入 “Unindent” → 回车,比手动删 Tab 更稳
跨多个 CSS 文件提取怎么办
用 Ctrl+Shift+F(Windows/Linux)或 Cmd+Shift+F(macOS)打开 Find in Files 面板,填入上面的正则,Where 栏指定路径(如 ./src/**/*.css),务必勾选 Regular Expression。
立即学习“前端免费学习笔记(深入)”;
- 结果页默认带
filename:line_num:前缀,复制后需用替换清理:搜索^[^@]*@media,替换为空,再删残留空行 - 若路径里有空格或特殊字符(如
my project/css),Sublime 会报错;改用相对路径./css或拖拽文件夹到 Where 栏自动生成安全路径 - 别留
Where为空:那只会搜当前打开的文件,不是“跨文件”
为什么不能用 Replace in Files 直接导出纯列表
因为 Replace in Files 不支持捕获组引用(如 $1),也无法把多个匹配块拼成一行或加换行分隔。你只能用它做全局替换,不能当提取器用。
- 想生成类似
@media (max-width: 768px) { ... }的纯文本列表?必须走Find in Files→ 复制结果 → 粘贴到新窗口 → 手动清洗 - 如果要导出为 JSON 或 CSV,Sublime 做不了;这时候该切到终端跑
grep -oP '@media[^}]*\{[^}]*\}' *.css或写 Python 脚本 - 最易忽略的一点:CSS 文件编码若为
GBK或含 BOM,Sublime 可能乱码匹配——操作前先确认右下角显示UTF-8,否则File → Reopen with Encoding → UTF-8


















