摘要:當然了,爲了使用正則表達式的匹配模式,需要在 VSCode 和 Sublime Text 中查找時點亮「.*」的標記。於是,當我們在「替換」中輸入 $1 的時候,它會從「查找」框中尋找第一個括號,並使用匹配到的第一個括號裏的內容來替換 $1 的部分。

Matrix 精選

Matrix 是少數派的寫作社區,我們主張分享真實的產品體驗,有實用價值的經驗與思考。我們會不定期挑選 Matrix 最優質的文章,展示來自用戶的最真實的體驗和觀點。

文章代表作者個人觀點,少數派僅對標題和排版略作修改。

正則表達式原本是計算機科學裏的術語,後來引入到程序語言中,在工程上也廣泛應用。不過,對於大部分讀者來說,即使我們不寫程序、不做計算機技術相關工作,依然可以在生活、工作中嘗試使用正則表達式。許多時候,若是使用正則表達式來完成,往往可以事半功倍。

它讓 VSCode 的「查找」「替換」如虎添翼

我們在日常生活或者工作中,總是會碰到需要「批量處理文本」的時候。昨天我朋友在煩惱工作上的一件小事情。她需要處理數百個手機號,每行一個,需要在每個手機號的前後分別加上一個雙引號。

最終變成:

"13100002222"
"13100003333"
"13100004444"
"13100005555"
"13312345678"
"13987654321"

也許你會選擇手動一行一行敲入引號 " ,亦或會動用 Excel 中強大的公式。然而,使用 Visual Studio Code、Sublime Text 等支持正則表達式替換的文本編輯器,這完全是小菜一碟。

在 VSCode 中,首先使用 option+command+F (macOS) 或者 Ctrl+H (Windows)打開「查找替換」欄。在第一行「查找」框中輸入 \d+ ,在第二行「替換」框中輸入 "$0" ,最後點擊「替換全部」按鈕(在「替換」框右側的第二個按鈕),所有操作就都完成了。

在 Sublime Text 中也是同樣的操作。

當然了,爲了使用正則表達式的匹配模式,需要在 VSCode 和 Sublime Text 中查找時點亮「.*」的標記。這個按鈕在 VSCode 查找框內的最右側,在 Sublime Text 查找欄的左上角。

現在可以來稍微解釋一下這裏用到的兩個表達式了。

在「查找」框中,我們填入的是 \d+ ,意思是「一個或更多的數字」。正則表達式中, \d 表示「數字」,而 + 表示「一個或更多」。

在「替換」框中,我們填入的是 "$0" ,很好理解,就是在前面查找出來的每一個結果兩側加上 " 雙引號。這裏, $0 可以用來「引用」整個匹配到的結果。

當然了,替換時的 $ 符號還可以有 $1$2$3 ……

還是剛纔的那些手機號,現在換成了稍微複雜一些的規則。查找時,輸入的規則是 (\d{3})(\d{4})(\d{4}) ,替換時的規則是 $1-$2-$3 。最後,我們得到了:

在這個規則中, \d{3} 意味着「3個數字」, \d{4} 以爲着「4個數字」。於是我通過 \d{3}\d{4}\d{4} 這樣一個規則,把號碼分成了 3、4、4 的三段。對於匹配到的每一段,我都加上了一個括號。

於是,當我們在「替換」中輸入 $1 的時候,它會從「查找」框中尋找第一個括號,並使用匹配到的第一個括號裏的內容來替換 $1 的部分。至於 $2$3 ,便是在查找時去匹配第二、第三個括號中的內容。

它讓 Everything 的搜索比快更快

Everything 是 Windows 上一款頗受好評的文件搜索工具,在 Windows 上實現了文件「即時搜索」的效果。

然而,Everything 搜索文件雖然很快,但是遇到文件名記不清的情況,就只能輸入幾個關鍵詞,在搜出的一大片文件列表中逐個確認,未免有些費時。

我曾經保存了一個圖片,名字就叫 apple ,但是卻忘記了它的文件格式。到底是 jpg 還是 png?還是 gif 或者 bmp?也可能是 jpeg 或者 webp?

直接使用 Everything 的普通模式搜索時,會出現數百個結果。

使用快捷鍵 Ctrl+R 打開「正則表達式」的開關,就可以使用正則表達式來進行匹配了。打開後,在 Everything 右下角的狀態欄中會出現「正則表達式」的文字。

這樣一來,搜索結果就只剩下了 4 個,尋找起來比剛纔省事很多。

我在這裏使用的正則表達式也並不複雜。 ^apple\..{3,}$ 中, ^$ 分別表示文件名的起始位置和結束位置,意味着在匹配到的結果前後都不再有其他字符。 \. 表明一個小數點 . ,也就是文件名和擴展名之間間隔的那個點。後面的 .{3,} 意味着「3 個或更多的任意字符」,匹配了擴展名中可能存在的 3 個或更多字符。

市面上也有一些其他文件搜索工具,使用了和 Everything 相似的技術原理,卻鮮見對正則表達式的完備支持。然而,如果沒有了正則表達式,這些文件搜索工具速度再快,也是沒有靈魂的。

它讓 Tasker 和快捷指令錦上添花

當你在你的 Android 手機上收到一條驗證碼,如何把它快速複製到你的剪貼板裏呢?現在各大定製 OS 都提供了「複製驗證碼」的功能,但是仍需手動點擊通知中的「複製」按鈕。藉助 Tasker 我們可以實現更加自動化的複製。

  1. 設置 PROFILE,當收到新短信時觸發
  2. 檢查短信中是否包含驗證碼
  3. 如果包含驗證碼,提取並複製到剪貼板
  4. 直接在對應的 APP 裏面粘貼

對於其中的第二步「檢查短信中是否包含驗證碼」,就又是正則表達式大展拳腳的地方了。

我這裏使用了一個簡單粗暴的方式來檢查驗證碼內容:是否包含連續 4-8 個數字。正則表達式用的是 \d{4,8} ,也就是從短信中尋找連續的 4-8 個數字,並放到剪貼板中。

iOS 上的「快捷指令」同樣可以使用正則表達式進行匹配和替換。比如下圖中的這個快捷指令,可以在分享知乎鏈接的時候,只複製最精簡的的回答鏈接。

如果直接複製,你得到的可能是這樣一大段文字:

三體中,歌者爲什麼那麼輕易就使用二向箔? — 王東凱陪你考注會 的回答 - 知乎 https://www.zhihu.com/question/304759872/answer/1079833112?utm_source=ZHShareTargetIDMore&utm_medium=social&utm_oi=26915779903488

而藉助這個快捷指令,你可以直接獲得下面的鏈接:

https://www.zhihu.com/question/304759872/answer/1079833112

用於匹配的正則表達式是這樣的:

https://www.zhihu.com/question/\d+/answer/\d+

它可以尋找到符合格式要求的網址,並通過後續的動作複製到剪貼板中。

總之,無論是在 Windows 和 macOS 上處理文本,還是在 Everything 中搜索文件,亦或是在手機和平板電腦上進行自動化的操作,如果一個工具可以支持正則表達式,如果你能夠善用正則表達式,那它一定會給你帶來許多新的可能性。

> 下載少數派客戶端、關注少數派公衆號,瞭解更精彩的數字生活 :leaves:

相關文章