使用vim搜索和替换将JSON字段名称包含在引号中

akr*_*ymn 5 regex vim

我有一个简单的json文件格式不正确它看起来像:

{ ID: '092558667',  
  NAME: 'Store Made',  
  PARENT_CATEGORY_ID: '692558669',  
  INCLUDED_IN_NET_SALES: '1' }  
Run Code Online (Sandbox Code Playgroud)

我需要做的就是用双引号包装字段名称.在vim中,我得到的最接近的是将字段名称和冒号包装在引号中 - 显然我需要弄清楚如何在没有冒号包裹的情况下获取字符串.这是我正在尝试的:

:%s/[A-Z_]*:/"&"
Run Code Online (Sandbox Code Playgroud)

如果我将冒号留在查询之外,则整个文件最终被选中.

Fel*_*ing 8

您可以使用捕获组:

%s/\([A-Z_]*\):/"\1":/
Run Code Online (Sandbox Code Playgroud)

要正确处理已引用的密钥:

%s/"\?\([A-Z_]*\)"\?:/"\1":/
Run Code Online (Sandbox Code Playgroud)

  • vim golf:`%s/[A-Z _]\+\ze:/"&"` (2认同)