使用Sublime正则表达式提取JSON中的深层嵌套节点

大静大大_4568

大静大大_4568

2026-08-29

779人浏览

原创

sublime text 无法直接用正则匹配深层嵌套 json 节点,因其 pcre 引擎不支持递归模式(如 (?r)),{.*?} 易被字符串内 {} 干扰或跨层级截断;安全提取固定路径需格式化 json 后用非贪婪+字符排除逐层锚定,复杂结构必须借助 python 构建系统调用 json 模块解析。

使用sublime正则表达式提取json中的深层嵌套节点

为什么不能直接用 Sublime 的正则匹配深层嵌套 JSON 节点

因为 JSON 是递归结构,而 Sublime Text 内置的 PCRE 正则引擎(v8.42 之前)不支持递归模式 (?R) 或平衡组,也没法可靠匹配任意深度的花括号嵌套。你写 \{.*?\} 很容易跨层级截断,或被字符串里的 {、} 干扰——比如 "name": "{value}" 就会让正则提前收尾。

安全提取 foo.bar.baz 这类路径节点的实操步骤

适用于已知路径、结构相对规整的 JSON(如 API 响应),且目标字段名不包含特殊字符。核心思路是:用非贪婪+排除字符串干扰,逐层“锚定”路径。

Comprehensive Three.js 3D graphics reference
Comprehensive Three.js 3D graphics reference

详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。

下载
  • 先确保 JSON 已格式化(Ctrl+Shift+P → JSON: Reindent),否则单行 JSON 会让正则更难控制
  • 搜索模式(启用 .* 模式):"foo"\s*:\s*\{[^{}]*"bar"\s*:\s*\{[^{}]*"baz"\s*:\s*([^{},\n]+)
  • 解释:[^{}]* 阻止跨层,[^{},\n]+ 抓取值(不含花括号、逗号、换行),适合简单值(字符串/数字/布尔)
  • 若值可能是对象或数组,改用:"baz"\s*:\s*(\{(?:[^{}]|(?R))*\}|\[(?:[^\[\]]|(?R))*\]) ——但注意:Sublime 当前版本(4143+)仍不支持 (?R),此写法会报错,不可用

真正能用的替代方案:用 Python.sublime-build + json 模块解析

当路径动态、嵌套深、或含转义字符时,正则必然失效。Sublime 支持运行外部脚本,这是唯一稳解。

  • 新建构建系统:Tools → Build System → New Build System,贴入:
{
  "shell_cmd": "python3 -c \"import json,sys; d=json.load(sys.stdin); print(d.get('foo',{}).get('bar',{}).get('baz','NOT_FOUND'))\" 
  • 保存为 JSON-Extract.sublime-build,然后打开 JSON 文件,按 Ctrl+B 即可输出 baz 的值
  • 路径更深?把 .get('bar',{}) 换成 .get('bar',{}).get('qux',{}) 即可,无深度限制
  • 注意:Windows 用户把 python3 换成 python,确保环境变量已配置
  • 容易忽略的关键细节

    JSON 字符串里可能有未转义的换行或制表符,Sublime 正则默认不跨行;即使开了 . 匹配换行,[^{}]* 也会被换行打断。而 Python json.load() 自动处理所有合法 JSON 白空格和转义——这才是它稳的根本原因。别在正则里赌“这次数据刚好没换行”。

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    js正则表达式
    js正则表达式

    php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

    2023.06.20

    3796

    8

    正则表达式不包含
    正则表达式不包含

    正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

    2023.07.05

    2281

    4

    java正则表达式语法
    java正则表达式语法

    java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

    2023.07.05

    6182

    9

    java正则表达式匹配字符串
    java正则表达式匹配字符串

    在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

    2023.08.11

    772

    5

    正则表达式空格
    正则表达式空格

    正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

    2023.08.31

    500

    5

    Python爬虫获取数据的方法
    Python爬虫获取数据的方法

    Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

    2023.11.13

    653

    12

    正则表达式空格如何表示
    正则表达式空格如何表示

    正则表达式空格可以用“\s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

    2023.11.17

    366

    3

    正则表达式中如何匹配数字
    正则表达式中如何匹配数字

    正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

    2023.12.06

    699

    7

    php正则表达式有哪些
    php正则表达式有哪些

    php正则表达式有"/pattern/"、"^"、"$"、"."、"[]"、"[^]"、"[a-z]"、"[A-Z]"、"[0-9]"、"\d"、"\D"、"\w"、"\W"、&a

    2024.02.23

    312

    5

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程