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。由于点号 . 在正则表达式中是一个特殊字符,表示“匹配任意单个字符”,因此如果要匹配点号本身,需要使用反斜杠进行转义,即 .。