跳至主要內容
FreeOnlineTools Go
繁體中文
參考

正規表示式速查表:語法、旗標與常見模式

作者:FreeOnlineTools Team · 更新日期:2026-08-28

快速解答

正規表示式組合了文字字元、元字元 (.、\d、\w、\s)、量詞 (*、+、?、{n,m})、錨點 (^、$、\b) 和群組 ((...)、[...])。 g(全域)、i(不區分大小寫)、m(多行)等標誌會更改匹配行為。在將測試模式嵌入程式碼之前,它們與我們的正規表示式測試器一起存在。

介紹

正規表示式 (regex) 使用緊湊的形式語言描述文字模式。每種現代程式語言、編輯器和搜尋工具都支援它們。此備忘單是 ECMAScript(由 JavaScript 使用)定義的語法以及您可以複製和改編的常見模式的參考。使用我們的正規表示式測試器針對瀏覽器中的範例文字嘗試任何模式。

步步

  1. 字符類別——匹配一組字符

    [abc] 符合 a、b 或 c。 [^abc] 符合 a、b、c 以外的任何內容。 [a-z] 符合任何小寫字母。預定義類別:\d = [0-9]、\D = 非數字、\w = [A-Za-z0-9_]、\W = 非單字、\s = 空格、\S = 非空格、. = 除換行符之外的任何字元(使用 s 標誌來包含換行符)。

  2. 量詞-重複多少次

    * = 0 或更多。 + = 1 或更多。 ? = 0 或 1。 {n} = 恰好 n。 {n,} = 至少 n。 {n,m} = n 和 m 之間。添加 ?用於惰性匹配(例如 *? 匹配盡可能少的)。貪婪是默認設置,可能會導致嵌套模式災難性的回溯。

  3. 錨點和邊界-在哪裡匹配

    ^ 符合字串的開頭(或帶有 m 標誌的行)。 $ 匹配結尾。 \b 符合單字邊界(\w 和 \W 之間)。 \B 符合非單字邊界。錨點是零寬度的-它們測試位置而不消耗字元。

  4. 分組及輪換

    (abc) 是一個捕獲組;使用 $1、$2 進行替換。 (?:abc) 是非捕獲組。 (?=abc) 是一個前瞻性(斷言接下來的內容)。 (?!abc) 是否定的前瞻。 (?<=abc) 是向後尋找 (ES2018+)。 a|b 是交替(a 或 b)。

  5. Flags-改變匹配行為

    g = 全域(尋找所有符合項,而非僅是第一個)。 i = 不區分大小寫。 m = 多行(^ 和 $ 匹配行邊界)。 s = dotAll (. 匹配換行符)。 u = unicode(將模式視為 Unicode 碼點;表情符號和星體字元需要)。 y = 黏性(僅在lastIndex處匹配)。

範例

匹配電子郵件地址(實用,RFC 5322 簡化)

輸入: Pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/

輸出: 符合“[email protected]”和“[email protected]”,但不符合“plainaddress”或“@no-user.com”

從 CSS 中提取所有十六進位顏色代碼

輸入: Pattern: /#[0-9a-fA-F]{3,8}\b/g

輸出: In 'color: #fff; background: #1a2b3c4d' finds ['#fff', '#1a2b3c4d']

驗證 ISO 8601 日期 (YYYY-MM-DD)

輸入: Pattern: /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/

輸出: 匹配“2026-08-28”但拒絕“2026-13-01”和“2026-02-31”

使用捕獲組將數字替換為 #

輸入: “訂單 42 已出貨”替換為 /(\d+)/g →“#$1”

輸出: “42 號訂單已出貨”

常見問題

  • 貪婪量詞匹配太多:「<a><b>」上的「<.*>」匹配整個字串「<a><b>」而不是「<a>」。首先使用“<.*?>”(惰性)來匹配“<a>”。
  • 災難性回溯:輸入「aaaaaaaaaaaaaaaaa!」上的巢狀量詞如 (a+)+b可能需要指數時間。重寫模式或在支援的情況下使用原子組/所有格量詞。
  • 忘記 Unicode 的 u 標誌:/^.$/ 匹配單一代碼單元,因此像「😀」(兩個代碼單元)這樣的表情符號在沒有 u 標誌的情況下會失敗。匹配星體字元時始終添加 u。
  • 將 \b (單字邊界)與 \s (空格)混淆: \b 在單字和非單字字元之間匹配,因此它也適用於字串的開頭/結尾。 \s 僅符合實際的空白字元。

提示

  • 在將正規表示式嵌入到生產程式碼之前,請務必在我們的正規表示式測試器中針對符合和不匹配的樣本進行正規表示式測試 - 邊緣情況很容易被忽略。
  • 對於單一字符,優先選擇字符類別 [a-z] 而不是交替 (a|b|...|z) — 類別更快、更清晰。
  • 當您不需要捕獲的值時,請使用非捕獲組 (?:...) — 捕獲的性能成本很小,並且會使結果數組變得混亂。
  • 使用 new RegExp() 或模組範圍內的文字編譯一次正規表示式,而不是在熱循環內 - 在每次迭代時重新編譯相同的模式會浪費 CPU。

相關工具

相關指南

參考