正規表達式測試工具
即時標示比對結果、擷取群組、取代預覽——正規表達式測試完全在你的瀏覽器裡進行。
引擎:由瀏覽器執行的 JavaScript (ECMAScript) 正規表示式。行為可能與 PCRE、Python、Go、Java 或 .NET 不同。
解說模式
輸入模式後,就能逐個符號查看說明。
模式範例庫
點擊一個模式,就會連同範例文字載入到測試器中。
每行一個案例。若模式必須符合,請以「+ 」開頭;若不得符合,請以「- 」開頭(此處會忽略 g 與 y 旗標)。
產生程式碼
輸入模式後即可產生程式碼。
模式會照原樣複製(只會調整具名群組、旗標與取代代碼)。請自行確認目標引擎對後行斷言、反向參照與 Unicode 的支援。
- \d — 任一數字(0–9)
- \w — 任一單字字元(字母、數字、底線)
- \s — 任一空白字元
- . — 除了換行以外的任一字元
- ^ — 字串開頭(若加上 multiline 旗標,則是每一行的開頭)
- $ — 字串結尾(若加上 multiline 旗標,則是每一行的結尾)
- * — 前一個 token 出現零次或多次
- + — 前一個 token 出現一次或多次
- ? — 前一個 token 出現零次或一次
- {n,m} — 重複出現 n 到 m 次
- (...) — 擷取群組(capturing group),(?:...) — 非擷取群組(non-capturing group)
- \b — 單字邊界,| — 交替(OR,任選其一)
在瀏覽器裡測試正規表達式,背後到底是怎麼運作的?
正規表達式(regex)是一種精簡的模式語言,用來比對文字——從「這串文字看起來像不像 email 地址」到「找出這份文件裡所有的電話號碼」,再到「把字串裡的 HTML 標籤全部去掉」都靠它。麻煩的是,regex 語法非常容易在不知不覺間寫錯:該跳脫的 `.` 忘了跳脫、貪婪的 `*` 吃掉了比預期還多的內容、以為抓到了某個群組,結果它根本沒擷取到你想要的東西。如果寫的時候完全憑感覺,直到丟進正式環境跑到一半才發現寫錯,這種學教訓的方式代價未免太高。
這個工具完全建立在 JavaScript 內建的 `RegExp` 引擎之上,你一輸入就會在瀏覽器裡即時執行——沒有任何伺服器參與其中,所以無論你拿來測試的是什麼文字(可能是真實的使用者資料、日誌內容,或任何你不想貼到第三方服務上的東西),都不會離開你的裝置。因為用的正是你的 JavaScript 程式碼在正式環境會執行的那套引擎,所以這裡看到的結果——哪些字元被比對到、貪婪量詞的行為模式、某個群組到底有沒有擷取到內容——就是你在執行階段會拿到的真實結果,而不是套用另一種 regex 語言風格所模擬出來的近似值。
輸入 pattern,再依需求切換旗標:`g` 找出所有符合的結果,而不是只停在第一個;`i` 忽略大小寫;`m` 讓 `^` 和 `$` 比對每一行的開頭與結尾,而不是整段字串;`s` 讓 `.` 也能比對換行字元。測試字串裡每一筆符合的內容都會即時標示出來,下方還會逐一列出完整比對文字、所在位置,以及任何擷取群組——包括像 `(?<year>\d{4})` 這種具名群組——讓你馬上能確認自己想擷取的群組,是不是真的抓到了正確的內容。「取代」區塊會準確顯示 `String.replace()` 搭配你的 pattern 和取代字串會產生什麼結果,包括 `$1` 或 `$<year>` 這類群組反向參照(backreference)。
下方的快速參考小抄,整理了大家在寫 regex 時最常忘記的那幾個 token——`*` 和 `+` 差在哪裡、非擷取群組 `(?:...)` 是做什麼用的、`\b` 又是怎麼標示單字邊界——不必離開頁面查資料。等你用貼近真實情境的測試資料,確認 pattern 的行為完全符合預期,就可以直接放進程式碼裡使用了。如果還需要驗證或重新整理周邊的資料本身,JSON 格式化與驗證工具、以及文字差異比對工具都是很自然的搭配。
常見問題
寫得不好的正規表示式會讓頁面當機嗎?
不會。比對作業在獨立的 Web Worker 中執行,並設有強制逾時,即使是會造成災難性回溯的模式,也不會鎖死你的分頁。
會顯示具名與編號的擷取群組嗎?
會。每筆符合結果都會列出編號群組,以及像 (?<year>\d{4}) 這樣的具名群組。
在用到程式碼之前,可以先預覽取代結果嗎?
可以。「取代」面板會精確顯示 String.replace() 的輸出內容,包含群組反向參照。