Skip to main content

快速隱藏檢查用的Consle.log

需求

  1. 在 master Branch 中, 移除所有的 console.log
  2. 在開發時, 可以快速隱藏 所有 console.log
  3. 在開發時, 可以快速顯示 所有 console.log

解決方案 使用 Vscode

  1. regex replace 搜尋 console.log
  2. 使用正規表示式, 取代成所需格式

刪除所有 console.log (不管是否註解)

搜尋符合條件的 console.log

\/\/.*console\.log\(.*\)

替換成空白

  • //:這部分匹配行中的注釋符號 //。在正則表達式中,斜杠 / 是特殊字符,用於界定正則表達式的開始和結束。因此,如果要在匹配模式中包括斜杠本身,需要使用反斜杠 \ 對其進行轉義,所以 // 變為 //。
  • .:這是一個通配符序列,. 匹配任何單個字符(換行符除外), 表示前面的元素可以出現零次或多次。所以,.* 代表匹配任意長度的任意字符序列,包括空序列。
  • console.log:這部分直接匹配文本 console.log。同樣,因為點 . 在正則表達式中是一個特殊字符,代表匹配任何單個字符,所以當我們想要匹配點字符本身時,需要使用反斜杠對其進行轉義,即 .。
  • (.):匹配 console.log 語句中的括號及其內部的任意字符。括號 ( 和 ) 也是正則表達式中的特殊字符,用於分組,因此需要用反斜杠轉義 ( 和 ) 以匹配實際的括號字符。. 匹配括號內的任意長度字符序列。

or select console.log , Ctrl + D to select all console.log, Ctrl + L to select all line, then delete

註解所有 console.log

搜尋符合條件的 console.log 但不包含已註解的 console.log

^(?!.*\/\/.*console\.log).*console\.log\(.*\)

替換成註解的 console.log

// $0
  • ^:這個符號表示匹配行的開頭。它確保了接下來的模式必須從每一行的最開始匹配。

  • (?!.*//.*console.log):這是一個否定前瞻(negative lookahead)表達式。前瞻是一種不消耗字符的斷言,用來檢查某個模式是否在後面出現(或不出現,對於否定前瞻來說):

    • ?! 表示這是一個否定前瞻。
    • .//.console.log 檢查是否存在任意字符(.),後面跟著注釋符號 //,然後是任意字符(.)和 console.log 語句。如果這樣的模式存在,則否定前瞻失敗,表示該行不匹配。
  • .console.log(.):在確定一行不含被註解的 console.log 後,這部分匹配包含 console.log 語句的任意位置。它由以下部分組成:

    • .* 匹配行中 console.log 之前的任意字符。
    • console.log 直接匹配文本 console.log。點(.)被轉義了(.),因此不是作為任意字符匹配的特殊符號。
    • (.*) 匹配 console.log 語句的括號及其內部的任意字符

還原所有已註解 console.log

搜尋符合條件的 console.log 的註解符號

\/\/(?=\s*console\.log)

替換成原未註解的 console.log

  • //:这部分匹配代码中的注释符号 //。在正则表达式中,斜杠 / 是一个特殊字符,通常用于标记正则表达式的开始和结束。因此,当我们需要在模式中查找斜杠本身时,必须使用反斜杠 \ 进行转义,从而 // 写作 //。

  • (?=\sconsole.log):这是一个正向预查(lookahead)表达式,用于指定一个条件,即在 // 之后(可能有任意数量的空白符,包括空格和制表符,由 \s 匹配)必须紧跟 console.log 文本:

  • ?= 表示这是一个正向预查,它要求紧接着当前位置的字符串满足某个模式,但不消耗(也就是说,不移动匹配“光标”)任何字符。

  • \s* 匹配任意数量的空白字符,包括空格、制表符等。

  • console.log 直接匹配文本 console.log。由于点号 . 在正则表达式中是一个特殊字符,表示“匹配任意单个字符”,因此如果要匹配点号本身,需要使用反斜杠进行转义,即 .。