大量正規表示式速查表是一個可搜尋的參考工具,能快速找到許多正則符號、確認其精確意義,並在不混入其他方言的情況下複製 JavaScript 語法。 Regex Cheat Sheet 提供 44 條精選的 ECMAScript RegExp 條目,橫跨六個類別:字元(Characters)、字元類別(Character classes)、群組與引用(Groups and references)、量詞(Quantifiers)、斷言(Assertions),以及旗標(Flags)。可用符號(如 \d)或概念(如「lookbehind」、「Unicode」、「lazy」、「named」)進行搜尋,再透過類別篩選縮小範圍。每筆結果都會提供精確的符號、簡要的意義,以及一個 JavaScript 範例。在某一行點選 Copy 只會把該行精確的符號放進剪貼簿,不會包含範例中的斜線分隔符或旗標。搜尋與篩選都在當前的瀏覽器分頁中執行,查詢、選定的類別、複製的符號以及其他輸入都不會被上傳。方言界線至關重要,因為 PCRE、Python、.NET、Java、RE2、POSIX、shell glob 以及編輯器模式雖然可能共用看起來熟悉的符號,但其支援程度或意義卻可能不同。因此本工具是語法參考,並非驗證器、安全性分析器、相容性資料庫,也無法擔保某個模式具有效率。

regex cheat sheet bulk
Regex Cheat Sheet Bulk Workflow for JavaScript

44 條 JavaScript 速查表的涵蓋範圍

本參考刻意固定為 ECMAScript 所定義的 JavaScript RegExp。其中精選的 44 條條目分為六個非空類別,每一行皆包含類別、精確符號、簡要意義與 JavaScript 範例。所有條目皆依 ECMAScript 的 RegExp 模式語法(pattern grammar)進行檢查,並與 MDN 的 JavaScript 正則表示式語法速查表 交叉核對。

類別 涵蓋範圍 實用搜尋
Characters 點、ASCII 數字與單字跳脫、空白字元跳脫,以及 Unicode 屬性跳脫 \d、\w、dot、whitespace
Character classes 列舉、否定、與區間型字元類別 range、negated class
Groups and references 編號與具名捕獲群組、非捕獲群組,以及編號或具名反向引用 named、backreference
Quantifiers 零次或多次、一次或多次、可選、精確次數、有界次數,以及惰性重複 lazy、exact count、bounded count
Assertions 錨點、邊界、lookahead 與 lookbehind anchor、boundary、lookbehind
Flags d、g、i、m、s、u、v 與 y Unicode、line terminator、lastIndex

搜尋詞可找出符號、意義、範例或類別。搜尋 \d 可定位精確的數字符號;而像「lookbehind」或「line terminator」這類概念搜尋,則會帶出相關的意義與範例。搜尋與類別篩選可合併使用,顯示的數量會回報完整的符合數,不存在隱藏的結果上限。若組合查詢無結果,介面會明確顯示空白狀態。

尋找並複製 JavaScript RegExp 符號

  1. 在搜尋欄位中輸入符號或概念。 若你已知精確的符號,例如 \d,可直接輸入;若是想查詢行為,則可使用描述詞,例如「Unicode」、「lazy」、「named」或「lookbehind」。
  2. 選擇類別以縮小 JavaScript 專屬條目範圍。 當第一輪結果太廣時,請選取相關的類別。類別與文字查詢會一起作用。
  3. 檢視符合的該列。 確認其精確符號、簡要意義,以及可執行風格的 JavaScript 範例。範例皆為正則表示式字面值(literals),因此仍可看到斜線分隔符與相關旗標。
  4. 在你需要的那一列點選 Copy。 剪貼簿只會收到 Token 欄中精確的符號——而非其類別、說明、範例、斜線分隔符或範例旗標。

瀏覽器仍可能拒絕剪貼簿存取。在此情況下,工具會回報一個可復原的錯誤,而不會宣稱複製成功。更換搜尋或類別也會讓先前的剪貼簿作業失效並清除其狀態,以避免延遲的回饋被誤判為屬於其他篩選結果。當你需要明確的結果時,請在變更篩選前先完成複製。

依符號、概念或類別搜尋

大量查詢最好能在精確符號與自然語言概念之間切換。請使用以下起點來減少你需要檢視的列數。

查詢目標 從何開始 考慮的類別 複製前先確認
尋找數字跳脫 \d Characters 其在 JavaScript 中的意義是 ASCII 數字,並非所有 Unicode 十進位數字
尋找 lookbehind lookbehind Assertions 正向與否定形式不同,且兩者皆不消耗前方的文字
尋找 Unicode 屬性 Unicode 或 \p{Letter} Characters 或 Flags 屬性跳脫需要 u 或 v
尋找惰性重複 lazy Quantifiers 預設為貪婪;在量詞後加上 ? 即可使其變為惰性
尋找具名群組 named Groups and references 具名捕獲與具名反向引用執行不同的工作
確認點(dot)的行為 line terminator Characters 或 Flags s 旗標會改變點是否能匹配行終止符

在處理大量收集時,請依照深思後的順序逐類別進行,只複製模式真正需要的元件。插入字元跳脫或斷言時以精確語法搜尋;在決定該用捕獲、反向引用或量詞時則以意義來搜尋。請檢視範例所需的上下文,但不要把該範例誤當成剪貼簿的輸出。複製而來的 Unicode 屬性跳脫仍需要其必要的旗標,而且一個複製來的符號並不會自動成為一個完整的模式。

通用速查表可能模糊化的 JavaScript 細節

字元、類別與 Unicode

在 JavaScript 中,\d 匹配 ASCII 數字 0 到 9;它並非所有 Unicode 十進位數字的簡寫。\w 條目主要涵蓋 ASCII 字母、ASCII 數字與底線,當 i 與 u 合併使用時,會有一個文件中明載的 Unicode 感知大小寫轉換細節。若要匹配像是 Letter 的 Unicode 屬性,請搭配 u 或 v 旗標使用 \p{Letter}。其補集為 \P{Letter}。屬性跳脫在沒有適當的 Unicode 感知模式時是無效的。

字元類別可以區分為 [abc](列出允許的字元)、[^abc](否定列出的集合),以及 [a-z](定義包含式區間)。跳脫列涵蓋 \xHH(兩位數十六進位)、\uHHHH(四位數 UTF-16 字碼單元),以及 \u{...}(帶大括號的 Unicode 字碼點)。帶大括號的形式需要 u 或 v。

群組、重複、斷言與旗標

群組語法並非能互換的。像 (?:...) 這種非捕獲群組可控制群組而不建立額外的捕獲位置;而像 (...) 這種編號群組則會進行捕獲。本參考能區分這些形式與具名捕獲。像 \1 這種編號反向引用,以及像 \k<name> 這種具名反向引用,會匹配先前已捕獲的文字;它們並非建立該捕獲的群組之替代品。選擇(alternation)以 x|y 表示。

量詞預設為貪婪。在量詞後加上 ? 會使該量詞變為惰性,例如 +?,但這與單獨使用的可選量詞不同,並不會讓被重複的運算式變成可選。JavaScript 的 lookbehind 以 (?<=...) 表示正向斷言,並以 (?<!...) 表示否定斷言。兩者皆會檢視當前位置之前的文字,且不會消耗該段文字。

旗標區段包含 d、g、i、m、s、u、v 與 y。s 旗標讓點能匹配行終止符,而 m 改變 ^ 與 $ 處理行邊界的方式。g 旗標啟用全域匹配並影響有狀態操作中的 lastIndex;y 要求在 lastIndex 處匹配;d 會公開匹配索引。較新的 v 旗標提供 UnicodeSets 行為,包括類別集合運算與字串屬性,但 JavaScript 不允許在同一个 RegExp 上同時使用 u 與 v。

將複製的符號組成可測試的模式

由於 Copy 是元件層級的,分隔符、旗標與模式結構仍由你負責。請僅在建構的運算式中適當的位置使用每一個複製來的符號。

  • 逐類別進行,只收集目前模式所需的字元、類別、群組、量詞、斷言與旗標。
  • 把每個複製來的符號插入到現有的 JavaScript 模式中其角色明確的位置;當你需要捕獲時,不應使用非捕獲群組。
  • 額外加入所需的上下文。例如 \p{Letter} 仍需要 u 或 v,而且這些旗標無法合併使用。
  • 可用該列的範例來理解分隔符與旗標,但不要預期它們會出現在剪貼簿結果中。
  • 在瀏覽器、嵌入式執行環境,或將執行此運算式的 Node.js 版本中,將完成的運算式套用於具代表性的輸入進行測試。

當行為是關鍵時,Regex Tester 是可供查詢的相關工具。MDN RegExp 參考 提供了超越符號查詢的 JavaScript 專屬 API 與行為細節。

了解參考資料無法確立的事項

本速查表是快速的語法參考,並非完整模式的驗證器、安全性分析器、相容性資料庫,也無法擔保某個模式具有效率。一個符號可能被精確地複製,卻仍不適用於預期的輸入,因此請用具代表性的資料測試實際的模式。請避免在不受信任的文字上進行不受控的逆溯(backtracking)。當程式碼會於特定瀏覽器、嵌入式執行環境或較舊的 Node.js 版本上執行時,請一併驗證該環境的功能支援。複製僅能確認哪個符號被傳送;它無法確認組裝後模式的正確性、安全性或執行階段的相容性。

延伸閱讀:如何將 Excel 工作表分離至不同活頁簿。