正则提取JSON字段值应使用"id"\s:\s("1"|\d+),避免贪婪匹配和忽略字符串引号;跨行提取console.log用console.log([\s\S]?);?;函数名提取仅适用于简单function声明;邮箱和URL需加\b和2限定边界。" ↩"\s ↩

怎么用正则从代码里提取 JSON 字段值
直接匹配 "id"\s*:\s*("[^"]*"|\d+) 就能抓到大部分 id 字段的原始值,但要注意它不处理嵌套或注释干扰。
常见错误是写成 "id":\s*(.*) —— 这会贪婪匹配到行尾,可能吞掉后面内容;或者漏掉引号包裹的字符串,导致只捕获数字。
- 必须转义引号和点号:
"id"\s*:\s*中的"和:本身不是元字符,但加空格容忍更鲁棒 -
"[^"]*"表示双引号内任意非引号字符,比.*?更安全,避免跨字段误匹配 - 如果字段值含转义符(如
"name": "a\"b"),这个正则会截断,此时得换用支持递归的解析器,VSCode 正则不支持
如何跨行提取 console.log 参数内容
普通 .* 不跨行,所以 console\.log\((.|\n)*?\);? 是最简可行方案,但性能差、易卡顿。
真正稳定的做法是用 [\s\S] 替代 .:搜索 console\.log\(([\s\S]*?)\);?,它明确告诉 VSCode 匹配所有字符(含换行)直到第一个右括号。
-
[\s\S]比(.|\n)效率高,尤其在大文件中 - 结尾加
?是关键——否则会贪婪匹配到最后一个),中间所有 log 都被包进去 - 如果日志末尾没分号(比如 TypeScript 的
console.log("x")),;?要保留,否则匹配失败
批量提取函数名并生成调用列表
匹配 function\s+(\w+)\s*\([^)]*\)\s*\{ 可以捕获函数名,但实际项目里常有箭头函数、export default、类方法等干扰项。
纯正则无法覆盖全部 JS 函数定义,它只适合结构清晰的旧式声明。例如 const getData = () => {} 或 class A { method() {} } 都不会被这个正则命中。
-
\w+只匹配 ASCII 字母数字下划线,不支持中文或 $ 开头的变量名 -
[^)]*假设参数不含括号,遇到fn(a: string, b?: number)类型定义就失效 - 若需完整提取,建议先用 ESLint 或 AST 工具导出函数列表,正则只作辅助筛选
提取邮箱或 URL 时为什么总多匹配一两个字符
根本原因是没用单词边界 \b。比如搜 [a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,},可能把 test@example.com/path 整个当邮箱匹配。
加上 \b 锚定:搜索 \b[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,}\b,就能排除后缀干扰。
-
\b匹配词边界(字母/数字/下划线 与 非这些字符之间),不是空格 - 大小写敏感默认开启,搜邮箱时建议关掉
Aa图标,否则EXAMPLE@DOMAIN.COM会漏掉 - URL 匹配推荐用
https?:\/\/[^\s"]+,加[^\s"]防止吞掉 HTML 标签或引号闭合符


















