我需要對我的網站存儲庫進行一個相當大的更改。

我有數百個 Markdown 文件,而在我的 Markdown 中,有時會包含帶有空格的圖像,這主要是因為它們是截圖,所以格式類似於

Screen Shot 2021-10-16 at 09.45.47.png

加載圖像的字符串是:

![Alt text](/images/vscode-search-replace-regex/Screen\_Shot\_2021-10-16\_at\_09.45.47.png)

這在我安裝的 Hugo 版本中運行良好,但最近在版本 0.100 中,他們刪除了我使用的 Markdown 库,名為 Blackfriday,現在只支持 Goldmark,它不再允許圖像中有空格(還有其他更改)。

為了跟上 Hugo,我真的需要更新我的網站,因為我使用的是舊版本,已經停止更新 10 個月了。

這就是我的問題所在。我需要更新所有的圖像鏈接。

嗯,其實不是這樣。我可以在圖像名稱中加上 <>

![Alt text](/images/vscode-search-replace-regex/Screen\_Shot\_2021-10-16\_at\_09.45.47.png)

然後一切又正常了。

我只需要搜索和替換所有的圖像鏈接!

我有成千上萬個這樣的鏈接,這不是我要做的事情。

所以我記得在 VS Code 中的查找/替換功能中有正則表達式。

經過一番試驗,使用如下的正則表達式:

!\[(.+)\]\((.\*\s+.\*)\)

我能夠創建 2 個捕獲組,一個用於 alt 文本,一個用於文件名。

然後在替換框中,我可以使用 $1 作為 alt 文本,使用 $2 作為文件名:

!\[\]\((.\*\s+.\*)\)

這個替換字符串 ![](/images/vscode-search-replace-regex/$1)對於沒有 alt 文本的圖像有效(我知道,我知道…):

我是如何得出這些正則表達式的?

主要通過我的 JavaScript 正則表達式教程

我之前寫過那篇文章,但它仍然是我首選的資源。

然後是一些谷歌搜索和使用 https://regex101.com 快速測試正則表達式。

正則表達式對我來說仍然有點神奇,但有時它是唯一能做到的工具。

就像在這個例子中一樣。