跳到主要內容
楓葉工具箱 ToolMaple

Regex 正規表示式測試

輸入 regex pattern 與測試文字,即時標出所有匹配結果、捕獲分組與位置,支援 g、i、m、s、u、y 旗標。表單驗證與 log 解析的規則,先在這裡試對再放進程式。

點擊任一範本、自動填入 pattern + 對應範例測試文字。

匹配結果(2 個)

聯絡:hello@toolmaple.com 支援:support@example.com 隨機:abc xyz
詳細:分組與位置(2 個)
  • match: hello@toolmaple.comindex: 3
  • match: support@example.comindex: 26

什麼是正規表達式?

正規表達式(Regular Expression,簡稱 Regex 或 RegExp)是「用一串符號描述一組字串模式」的語言。 理論基礎 1956 年由數學家 Stephen Kleene 提出,1968 年起進入 UNIX 工具(grepsedawk)成為實用方言,1994 年 Perl 5 的擴充語法(PCRE)影響至今所有主流語言。今天 JavaScript、Python、Java、Go、Ruby 幾乎都支援,語法 90% 互通,剩 10% 差異是各家方言。

常見使用情境

  • 表單驗證:email、手機、身分證、密碼複雜度檢查(前端即時提示)
  • Log / 設定檔解析:從 server log 撈出時間戳、IP、錯誤代碼,用 Regex 切欄位
  • 大量取代:VS Code、Sublime 的 Find & Replace 開 Regex 模式,一次改幾百個檔案
  • 資料清理:CSV 欄位裡的全形空白、零寬字元、HTML entity,一次清掉
  • 網頁爬蟲:HTML / 純文字裡抓 URL、email、電話、價格
  • 程式碼搜尋:找 console.log 殘留、TODO 註解、未使用的 import

支援的 Regex 旗標

  • g(global):找出所有匹配。預設強制開啟。
  • i(ignoreCase):大小寫不敏感
  • m(multiline):`^` 與 `$` 對應每行的開頭結尾
  • s(dotAll):`.` 可以匹配換行
  • u(unicode):完整 Unicode 支援(含 Emoji 等 surrogate pair)
  • y(sticky):lastIndex 開始的位置匹配

常用 Regex 範例

  • Email:\b\w+@\w+\.\w+\b
  • URL:https?://[^\s]+
  • 台灣手機:09\d{8}
  • 身分證字號:[A-Z][12]\d{8}
  • IP v4:\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
  • 日期 YYYY-MM-DD:\d{4}-\d{2}-\d{2}

語法速查(最常用 8 個)

  • .:任意單一字元(換行除外,加 s flag 才含換行)
  • \d \w \s:數字 / 英數底線 / 空白;大寫版 \D \W \S 是反向
  • [abc] [a-z]:字元組(其中一個)。前面加 ^ 變排除
  • * + ?:重複 0+、1+、0 或 1 次
  • {n} {n,} {n,m}:剛好 n 次 / 至少 n 次 / n 到 m 次
  • ^ $:行首 / 行尾(搭配 m flag 更實用)
  • (...):分組 + 捕獲;(?:...) 只分組不捕獲
  • |:或;\b:詞邊界(單字外圍)

技術細節

本工具用瀏覽器原生 RegExp(V8、SpiderMonkey、JavaScriptCore),效能與 Node.js 一致。支援 ECMAScript 2024 規格:命名分組((?<name>...))、後行斷言((?<=...) (?<!...))、Unicode property escapes(\p{L} 匹配任何語言的字母)。Safari 16.4 以下不支援後行斷言,需注意。

常見問題

greedy 跟 lazy 差在哪?

預設量詞是 greedy(貪婪),會盡量吃多。例如a.*baxxxbxxxb 會吃到最後一個 b。在量詞後加 ?lazy(懶惰),會盡量吃少:a.*?b 只吃到第一個 b。寫 HTML / 字串解析時常需要 lazy。

為什麼我的 email regex 抓不到某些 email?

因為 email 規範(RFC 5322)超複雜,所謂「完美的 email regex」長到誇張。實務上用簡化版(如 \S+@\S+\.\S+)擋掉 99% 明顯錯誤就夠,剩下的 0.1% 邊角案例(含中文網域、加號別名)讓伺服器寄驗證信去確認最實在。

什麼是「災難性回溯」(ReDoS)?

當 regex 含「巢狀量詞」(如 (a+)+b)遇到不匹配的長字串時,引擎會嘗試指數級數量的組合,變成卡死。寫 regex 時避免同位置兩個 +* 巢狀, 可降低風險。Go / Rust 用的 RE2 引擎不支援回溯,所以絕對不會卡。

PCRE / Python / Java 規則一樣嗎?

90% 一樣,10% 不同。本工具基於 JavaScript 引擎,所以結果跟你在 Node.js / 瀏覽器跑相同。要驗證 Python re 或 Java Pattern 的差異,請用對應語言實測(命名分組語法、unicode 預設行為都有微差)。

測試資料含個資怎麼辦

拿真實 log 或客戶資料來試 pattern 是常態,這裡的比對用的是 瀏覽器自己的 RegExp 引擎,文字留在你的分頁裡, 不需要先把個資碼掉再貼。

相關工具