URLhttps://learnscript.net/zh-hant/vscode/editors/find/regex/
    複製連結移至說明  範例

    在 Visual Studio Code 中使用正規表達式進行高級搜尋與取代

    閱讀 5:25·字數 1627·更新 
    Youtube 頻道
    訂閱 480

    前言

    正規表達式是處理文字搜尋和取代的強大工具,特別是在複雜的比對案例中。Visual Studio Code(VSCode)內建了完整的正規表達式支援,讓文字的編輯處理更加高效。

    在 Visual Studio Code 中啟用正規表達式

    在開始使用正規表達式之前,需要確保已啟用該功能:點選搜尋面板中的使用規則表達式按鈕,或使用鍵盤快速鍵Alt+R

    啟用後,即可在尋找條件和取代內容中書寫正規表達式。

    常見跳脫序列

    跳脫字元\可以跳脫正規表達式中的一些語法符號。比如,\\表示反斜線自身,\[表示左方括弧,\)表示右圓括弧。

    以下是 VSCode 中常見的跳脫序列。

    \d

    任意某個數值字元(09)。比如,1\d3比對表示以1開頭以3結尾的三位數的文字。

    \w

    任意某個單字字元(字母、數值、底線,不包含中文字元)。比如,set_\w\w\w\w比對以set_開頭後接四個單字字元的文字。

    \s

    任意某個空白字元(空格、定位字元、換行字元)。def\s比對以def開頭後接一個空白字元的文字。

    \D

    任意某個非數值字元。

    \W

    任意某個非單字字元。

    \S

    任意某個非空白字元。

    \n

    換行字元。

    \r

    歸位字元。

    \t

    定位字元。

    \xHH

    HH表示 Unicode 編碼(十六進位的兩位數),\xHH比對該編碼表示的字元。比如,\x20表示了空格。

    \uHHHH

    HHHH表示 Unicode 編碼(十六進位的四位數),\uHHHH比對該編碼表示的字元。比如,\u4e00\u9fa5,可作為漢字字元的開始和結束。

    比對字元集中的字元

    使用方括弧[]可以比對一系列字元(字元集)中的某一個字元。

    
    
    範例含義
    [\w]任意單字字元
    [a-d]a 到 d 之間的字母
    [0-3]0 到 3 之間的數值
    [\u4e00-\u9fa5]漢字字元
    [\(\)\[\]\{\}]各種括弧
    [你我他]特定中文字元

    如果使用[^],則將比對非字元集中的字元。

    
    
    範例含義
    [^A-D1-4]非 A 到 D 且非 1 到 4 的字元
    [^^]非 ^ 字元

    比對次數

    在 VSCode 中,同樣支援控製比對次數的數量詞,可以簡化正規表達式的書寫。

    *

    比對零次或多次。比如,abc*比對ababcabcc等。

    +

    比對一次或多次。比如,abc\s+表示abc後,至少有一個空白字元。

    ?

    比對零次或一次。

    {n}

    比對n次。比如,[abc]{3}表示由abc隨意組成的三個字元。

    {n,m}

    比對nm次。

    如果需要盡量少的比對字元,則可以在數量詞後加?,以實作最小相符。

    
    
    範例含義
    如果.*那麽貪心比對,在「如果」和「那麽」之間,比對盡可能多的內容。
    如果.*?那麽非貪心比對,在「如果」和「那麽」之間,比對盡可能少的內容。

    比對位置

    在 VSCode 中,可使用如下方式來比對一個位置。

    ^

    行開頭,^msg比對行開頭的msg

    $

    行結尾,"$比對行結尾的引號。

    \b

    單字界限,\bname\b比對完整單字name

    群組與參考

    VSCode 正規表達式支援群組功能,可在表達式的其他部分來參考群組。尋找時可通過\n的形式來參考,取代時可通過$n的形式來參考,其中n為群組的序號,預設從1開始。

    
    
    範例含義
    ("{3}|'{3}|"|')比對 Python 中的四種引號類型。
    ("|')My name\1比對 "My name" 或 'My name'。
    $1Your name$1可將上例中的 'My name',取代為 'Your name',或將 "My name" 取代為 "Your name"。

    斷言

    正規表達式中的斷言,可被視為一種位置檢測,分為以下四種。斷言內容不包含在比對結果中,並且可用於後續的比對程序。

    (?<=PATTERN)

    正向後行斷言,位置之前的內容與子表達式PATTERN相符。

    (?<!PATTERN)

    負向後行斷言,位置之前的內容不與子表達式PATTERN相符。

    (?=PATTERN)

    正向先行斷言,位置之後的內容與子表達式PATTERN相符。

    (?!PATTERN)

    負向先行斷言,位置之後的內容不與子表達式PATTERN相符。

    
    
    範例含義
    (?<=')Hello比對前面有單引號的 Hello,但不包含引號。

    講解影片

    VSCode 使用 regex 正規表達式尋找取代(語法詳細說明與範例)·YouTube