什麼是正規表達式?
正規表達式(Regular Expression,簡稱 Regex 或 RegExp)是「用一串符號描述一組字串模式」的語言。 理論基礎 1956 年由數學家 Stephen Kleene 提出,1968 年起進入 UNIX 工具(grep、sed、awk)成為實用方言,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 個)
.:任意單一字元(換行除外,加sflag 才含換行)\d\w\s:數字 / 英數底線 / 空白;大寫版\D \W \S是反向[abc][a-z]:字元組(其中一個)。前面加^變排除*+?:重複 0+、1+、0 或 1 次{n}{n,}{n,m}:剛好 n 次 / 至少 n 次 / n 到 m 次^$:行首 / 行尾(搭配mflag 更實用)(...):分組 + 捕獲;(?:...)只分組不捕獲|:或;\b:詞邊界(單字外圍)
技術細節
本工具用瀏覽器原生 RegExp(V8、SpiderMonkey、JavaScriptCore),效能與 Node.js 一致。支援 ECMAScript 2024 規格:命名分組((?<name>...))、後行斷言((?<=...) (?<!...))、Unicode property escapes(\p{L} 匹配任何語言的字母)。Safari 16.4 以下不支援後行斷言,需注意。
常見問題
greedy 跟 lazy 差在哪?
預設量詞是 greedy(貪婪),會盡量吃多。例如a.*b 對 axxxbxxxb 會吃到最後一個 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 引擎,文字留在你的分頁裡, 不需要先把個資碼掉再貼。
相關工具
- JSON 格式化
JSON 美化與壓縮雙向轉換,支援 2 / 4 / Tab 縮排,語法錯誤即時標出行號。
- URL 編碼解碼
中文與特殊字元 ↔ URL 百分比編碼(percent-encoding)雙向轉換工具,支援 e…
- Base64 編碼解碼
文字 ↔ Base64 雙向編碼解碼,完整支援 UTF-8 中文與特殊字元。
- Markdown 預覽
即時 Markdown 編輯與預覽,支援 GFM(表格、刪除線、checkbox、code block)。
- 字數計算機
即時統計字數、中文字數、英文單字、段落數、行數、含與不含空白字元。
- 身分證字號驗證
驗證台灣身分證字號 / 外國人統一證號(ARC)是否合法,解析縣市與性別,也是隨機產生測試用合法…
- Lorem Ipsum 產生器
產生 Lorem Ipsum 拉丁假文或中文亂數段落,可自選段落數、句數、字數與起始用語,一鍵複製。
