vimの正規表現で最短マッチ
vimでhtml内に記述された画像パスをCloudFront経由のパスに置換しようと思った時に最短マッチの記述方法にはまりました。
通常の正規表現で使用する .\*?
を使って"/img/~"の部分をヘルパーメソッド呼び出し( <%= cdn_path '/img/~' %>
)に変換しようと思い、
:%s/"\(\/img\/.*?)"/"<%= cdn_path '\1' %>"/g
と書いたのですがうまくマッチせず。
調べたところvimで最短マッチを行うには .{-}
と記述する必要があるそうです。
:%s/"\(\/img\/.\{-}\)"/"<%= cdn_path '\1' %>"/g
で想定していた置換が行えるようになりました。
vimの正規表現は特殊なのではまることが多いです。
js, cssも同様に変換できます。
:%s/"\(\/js\/.\{-}\)"/"<%= cdn_path '\1' %>"/g
:%s/"\(\/css\/.\{-}\)"/"<%= cdn_path '\1' %>"/g