Regex 非常神奇的正则表达式,可以让我替换这些图像吗?
我每天使用vim来处理文本和编写代码。然而,每次我必须执行任何替换,或做任何类型的正则表达式工作,这让我发疯,我必须切换到崇高。我想知道,正确的方法是什么:Regex 非常神奇的正则表达式,可以让我替换这些图像吗?,regex,vim,Regex,Vim,我每天使用vim来处理文本和编写代码。然而,每次我必须执行任何替换,或做任何类型的正则表达式工作,这让我发疯,我必须切换到崇高。我想知道,正确的方法是什么: <img src="whatever.png"/> <img src="x.png"/> 我做的什么不对?:%s/“\(.*)”/“/g 双引号超出了主模式。我们想要捕获的所有内容都被放入一个组\(\),因此我们可以稍后通过\1与之关联 如果你使用非常神奇的方法,你必须避开=,因此\vsrc\=(.*.png“。
<img src="whatever.png"/>
<img src="x.png"/>
我做的什么不对?:%s/“\(.*)”/“/g
双引号超出了主模式。我们想要捕获的所有内容都被放入一个组\(\)
,因此我们可以稍后通过\1
与之关联
如果你使用非常神奇的方法,你必须避开
=
,因此\vsrc\=(.*.png“
。因此,用你的方法,答案是:
:%s/\vsrc\="(.*\.png)"/src="<%= image_path("\1") %>"/g
:%s/\vsrc\=“(.\.png)”/src=”“/g
很容易看出您是否设置了hlsearch,然后使用/
:)根据,vim中惰性量词的语法与Perl(如regex)中使用的语法不同
让我引用网站上的话:
正如@nhahtdh所述,Vim的regex方言使用
{-}
作为非贪婪量词。如果使用非常神奇的标志,它只是{-}
。因此,您的命令变成:
:%s/\vsrc="(.{-}.png)/src="<%= asset_path("\1") %>"/g
但是我们仍然可以做得更好!通过使用\zs
和\ze
我们可以避免重新键入src=“
位\zs
和\ze
标记将发生替换的匹配的开始和结束
:%s/\vsrc="\zs(.\{-}\.png)"/<%= image_path("\1") %>"/g
有关更多帮助,请参阅以下文档:
:h /\zs
:h /\{-
:h s/\&
不太倾斜的命令:
:%s/src=“\zs.{-}\.png”//g
或%s/\vsrc=“\zs.{-}\.png”//g
处于非常神奇的模式。您可能想查找:h/\zs
和:hs/\&
@PeterRincker,这也是我的想法。彼得,你看起来像一个vim的铁杆用户,所以我有一个问题:学习vim的(奇怪的?)正则表达式值得吗?我非常喜欢编辑器,但它的正则表达式支持似乎很不自然,至少对我来说是这样。学会如何最好地使用编辑器几乎总是件好事。我个人并不觉得vim的正则表达式很难。小贴士列表:1)学会爱上\zs
2)不要忘记[^”*
patterns 3)Vim有许多正则表达式功能查看:h regexp
了解更多信息
:%s/\vsrc="(.{-}.png)/src="<%= asset_path("\1") %>"/g
:%s/\vsrc="(.{-}\.png)/src="<%= asset_path("\1") %>"/g
:%s/\vsrc="\zs(.\{-}\.png)"/<%= image_path("\1") %>"/g
:%s/src="\zs.\{-}\.png\ze"/<%= image_path("&") %>/g
:h /\zs
:h /\{-
:h s/\&