vi替代json

时间:2017-07-09 15:26:33

标签: regex vim

我有一个JSON文件,其中有一堆jpg引用,我试图用png替换。我希望匹配一个模式,其中有一个双位数和jpg之前的一段时间,捕获1,并在替换中使用它。问题是我只能找到未找到的模式。

"plith":"img/01.jpg"},{"block_ha....

替换代码如下所示

:%s/\(\d{2}\.\)+jpg/$1png/g

1 个答案:

答案 0 :(得分:3)

我尝试了这个替换命令:

:%s/\v(\d{2}\.)jpg/\1png/g

它取代了这条线:

"plith":"img/01.jpg"},{"block_ha....

使用:

"plith":"img/01.png"},{"block_ha....

如果可以重复2位数字和以下点,您可以将+量词应用于\d{2}\.

:%s/\v(\d{2}\.)+jpg/\1png/g

在原始命令中:

:%s/(\d{2}.)+jpg/$1png/g

似乎有3个问题:

  1. 您使用非转义括号来捕获数字,但默认情况下您需要转义它们。如果您不想,可以通过在模式中添加原子\v来切换到非常神奇的模式。

  2. 你没有逃脱.,这意味着它将匹配任何角色(换行除外),而不是文字点

  3. 在替换部分中,您使用$1来引用第一个捕获组,但它应该是\1