文字與日常工具·文字工具包
全字搜尋的工作原理:字邊界與貓|狗問題
· 工作原理
正規表示式 尋找和替換 文字編輯
解釋 JavaScript 正規表示式中的單字邊界是什麼,為什麼「cat」不能在「concatenate」內匹配,以及為什麼在添加邊界之前必須對 cat|dog 這樣的交替進行分組。
更改「連接」的重命名 - 為什麼短單字的簡單尋找和替換會損壞較長的單字
產品重新命名看起來無害,除非短名稱出現在不相關的單字中。將每次出現的 `cat` 替換為 `lynx` 會將 `concatenate` 改為 `conlynxenate`,即使沒有編輯者打算重新命名該動詞的一部分。當搜尋規則太廣泛時,僅符合計數無法保護檔案。
全字匹配在任何替換發生之前縮小規則範圍。在 ToolAcre 中,啟用全字使獨立的 `cat` 符合資格,同時保持 `concatenate` 內的相同字母不變。差異是結構性的而不是基於字典的:正規表示式引擎檢查每個可能匹配旁邊的字元。
\b 的意思 — 單字字元與非單字字元之間的零寬度位置
在 JavaScript 正規表示式中,`` 標記零寬度字邊界。它不佔用任何字母、空格或標點符號。相反,它在一側是單字字元而另一側不是單字字元的位置成功,包括當相鄰字元符合單字字元時的文字開頭或結尾。
JavaScript 的 `w` 類別為此實作提供了相關的單字字元:ASCII 字母、數字和底線。因此 `cat` 符合空格、逗號或行尾旁邊的 `cat` ,但不符 `concatenate` 內的 `cat` 段,因為該段的兩側都透過單字字元繼續,且那裡不存在邊界。
字面模式下的整個單字 - 首先將搜尋文字轉義,然後用邊界換行
關閉正規表示式後,ToolAcre 會先轉義搜尋文字中的每個正規表示式元字元。句号仍然是字面句号,括号仍然是字面括号,加号仍然是加号。只有在轉義步驟之後,整個單字才會換行產生的原始程式碼,因此使用者標點符號不能默默地成為正規表示式語法。
包裝器是 `(?:… )` ,沒有顯示空間:內部 `(?:…)` 是非捕獲組。對于诸如 `cat` 之類的簡單文字,效果相當于 `cat`。分組仍然很重要,因為一個編譯路徑必須安全地處理簡單的術語和更複雜的替代項,而無需更改捕獲組編號。
正則表達式模式下的整個單词 - 為什么 cat|dog 必須作為一組进行界定,或者邊界僅绑定到一個分支
正則表達式模式使輸入的模式保持不變,但整個單词仍然在添加邊界之前對其进行分組。對於 `cat|dog`,ToolAcre 編譯概念形式 `(?:cat|dog)`。因此,兩個選項都必須在字邊界處開始和結束,因此獨立 `cat` 和獨立 `dog` 在相同規則下匹配。
如果沒有該群組,`cat|dog` 將分為兩個分支:左邊界將只約束 `cat`,而右邊界將僅約束 `dog`。交替的优先級低于周围序列。分組是將兩個邊界斷言應用於整個選擇,而不是不均勻地分佈一個斷言。
工作範例 - 在整個檔案中重新命名產品,並根據預期檢查替換計數
貼上包含 `cat`、`dog`、`concatenate`、`dogged` 和標點符號(如 `cat, dog.`)的代表性段落,輸入 `cat|dog`,打開正字正則將所有表達式替換為全字名稱。兩個獨立的動物詞應該改變;較長的單字應保持原樣。
在接受編輯之前閱讀報告的替換計數。如果檔案有三個已知的獨立引用,但該工具會報告兩個或十二個,請選擇「撤銷」並檢查範例上下文。 ToolAcre 在呼叫標準字串替換之前對匹配項進行計數,因此顯示的總數是您實際編譯的搜尋規則的實際檢查。
單字邊界讓您感到驚訝 - JavaScript 的單字字元是 ASCII 字母、數字和底線,因此需要測試重音單字和非拉丁單字
這些邊界不實作多語言字典或 Unicode 文字分段演演算法。由於重音字母和非拉丁文字不屬於此處使用的 ASCII 樣式單字類別,因此整個單字可能會傳回零或為 `café` 等術語產生令人驚訝的邊緣位置。搜尋詞中的標點符號可能會導致同樣的不匹配。
在批次編輯之前測試確切的語言和拼寫,尤其是包含重音符號、撇號或連字符的名稱。邊界斷言僅比较相邻的字符類別;它不知道排版是否構成了一個人類單词。如果範例失敗,請針對這些環境使用故意設計的正規表示式,而不是信任該複選框。
JavaScript 單字邊界讓您感到驚訝的地方:ASCII 樣式的單字字元不是語言單字
该工具确實提供了一個單独的区分大小寫的選項,這與界面中不存在大小寫處理的任何含义相反。清除它會添加 JavaScript 的不區分大小寫標誌。然而,此實作僅使用全域匹配以及可選的不區分大小寫;它不添加 Unicode、多行、全點、黏性或其他標誌。
本文也不會將 `` 轉換為 Unicode 感知邊界或解決特定於語言的標記化。 JavaScript 屬性轉義在這裡不能取代,因為工具不會編譯帶有 Unicode 標誌的模式。對於多語言編輯工作,建立明確的測試案例並選擇所使用的瀏覽器引擎支援的模式。
工具中存在案例選項; Unicode 感知的字邊界不
整個單字是一個組合規則,而不是第二個替換引擎。文字模式逃避搜尋;正規表示式模式保留它;那麼相同的非捕獲組和兩個邊界包圍任一結果。此順序保護文字標點符號,並使 `cat|dog` 等正規表示式替代品表現為一個有界表達式。
當獨立 ASCII 樣式術語是預期目標時使用該選項,然後將替換計數和取消控制視為保護措施而不是裝飾。開啟 ToolAcre 的尋找和替換,針對獨立範例和嵌入式範例測試替換,並僅在這些範例按預期執行後將其應用於完整檔案。