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

时间:2013-09-30 16:27:27

标签: regex vim

我有一个简单的json文件格式不正确,如下所示:

{ ID: '092558667',  
  NAME: 'Store Made',  
  PARENT_CATEGORY_ID: '692558669',  
  INCLUDED_IN_NET_SALES: '1' }  

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

:%s/[A-Z_]*:/"&"

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

2 个答案:

答案 0 :(得分:8)

您可以使用capture groups

%s/\([A-Z_]*\):/"\1":/

正确处理已引用的密钥:

%s/"\?\([A-Z_]*\)"\?:/"\1":/

答案 1 :(得分:3)

好的,根据上面的信息,我最终得到了这个:

quality
  • 它支持upper- 小写字符
  • 它跳过已引用的字段

由于这可以被视为完成,我将其映射到.vimrc中的vim完成快捷方式ctrl-x ctrl-j(它们都以ctrl-x开头):

:%s/[ \t]\([A-Za-z_].*\):/"\1":/