推荐正则为:const\s+([a-za-z_$][\w$])\s=\s(1?)(?:;|\n),其中$1捕获变量名,$2捕获等号右侧至分号或换行前的内容,需关闭“. matches newline”选项以确保1*?不跨行失效。;{ ↩

匹配 const 声明的变量名和值
Sublime Text 的正则查找能直接定位常量定义,但默认不支持 JS/TS 中的解构、对象属性或动态键名,所以先聚焦最常见形式:const NAME = value; 或 const NAME = value(无分号)。关键在于区分「变量名」和「右侧表达式」,避免把注释、字符串或函数调用误吞进来。
推荐用这个正则:
const\s+([a-zA-Z_$][\w$]*)\s*=\s*([^;{]*?)(?:;|\n)
说明:$1 捕获变量名,$2 捕获等号右边直到分号或换行前的内容;[^;{]*? 防止跨到对象字面量开头(如 {),避免贪婪匹配过长。
- 如果代码里有
const { a, b } = obj;这类解构,这个正则会跳过——它只认简单赋值 - 若值是多行字符串或模板字面量(
`...`),需额外处理,基础版不覆盖 - 注意 Sublime 默认开启
. matches newline选项时,[^;{]*?会失效,务必关掉该选项(Find → Find… → ⚙️ → 取消勾选. matches newline)
提取所有 const 并导出为纯键值对列表
查找到全部匹配后,用 Replace All 批量转成易读格式,比如 KEY: VALUE。替换字段填:
$1: $2
这样能把 const API_URL = "https://api.example.com"; 变成 API_URL: "https://api.example.com"。但要注意几个坑:
-
$2包含空格和换行符,替换后可能有多余缩进,建议在替换前先用^\s+|\s+$清理首尾空白(单独跑一次) - 如果值里有双引号、反斜杠,导出后仍是原始字符串,不会自动转义——这不是 bug,是正则原样回填
- 想排除测试用的临时常量(如
const DEBUG = true),可在查找正则开头加负向先行断言:(?!.*DEBUG|.*TEMP),但 Sublime 的 PCRE 不完全支持,更稳的方式是手动筛选或分两次查
区分环境相关常量(如 process.env.NODE_ENV)
很多项目把配置写成 const ENV = process.env.NODE_ENV || 'development';,这类值实际来自运行时,不能直接当静态常量提取。靠正则很难 100% 判断是否“真常量”,但可加一层过滤:
查找时排除含 process\.env、import\.meta、globalThis\. 的行:
const\s+([a-zA-Z_$][\w$]*)\s*=\s*(?!.*process\.env|.*import\.meta|.*globalThis\.)([^;{]*?)(?:;|\n)
这个写法在 Sublime 中可用,但注意括号嵌套层级别太多,否则容易报错或漏匹配。
- 正则中
(?!...)是负向先行断言,必须紧贴在要检查的位置前,这里放在=后最稳妥 - 如果项目用了
define宏(如 Vite 的import.meta.env),也要加进排除列表,否则导出的“常量”其实每次构建都不同 - 这种过滤只是启发式,不能替代人工核验——尤其当值是函数调用返回字面量时(如
getEnv('API')),正则根本识别不了
导出结果后如何快速去重并排序
提取完的列表常有重复(比如多个文件定义同名常量)或顺序混乱。Sublime 自带命令就能处理:全选结果 → Ctrl+Shift+P(Win/Linux)或 Cmd+Shift+P(Mac)→ 输入 Sort Lines → 回车;再输入 Remove Duplicate Lines → 回车。
但注意:Sort Lines 是按字符串 ASCII 排序,URL 会排在 apiUrl 前面;如果需要驼峰优先,得先统一转大写再排,或导出后用外部工具(如 VS Code 的 sort-lines 插件)。
- 排序前建议先删空行:
^\s*$替换为空,避免干扰 -
Remove Duplicate Lines只删连续重复行,非连续的得先排序再删,顺序不能错 - 如果常量值含中文或特殊符号,Sublime 的排序可能不符合预期,这时复制到 Excel 或用 Python 脚本更可靠











