什麼是正規表示式測試?
正規表示式(Regular Expression,簡稱 regex)是用來尋找或取代符合特定規則之字串的模式語言,常用於表單驗證、日誌分析與大量文字取代。本工具使用瀏覽器內建的 JavaScript 正規表示式引擎,結果與 JavaScript、TypeScript 程式碼完全相同。
比對在獨立執行緒(Web Worker)中進行,即使寫錯的模式執行過久,也會在 1.5 秒後自動中止,畫面不會卡住。
使用方法
- 從常用範本選擇範例,或直接在正規表示式欄位輸入。不需要加前後的斜線(/)。
- 點選需要的旗標(g、i、m、s、u、y)來開啟或關閉。
- 輸入測試字串後,符合的部分會以顏色標示,下方清單會列出位置與群組值。
- 在取代字串中使用 $1、$<名稱>、$&,即可預覽取代後的結果。
正規表示式基本語法
| 語法 | 意義 | 範例 |
|---|---|---|
| \d \w \s | 數字 / 英數字與 _ / 空白 | \d{3} |
| . | 換行以外的任意字元(開啟 s 旗標時也含換行) | a.c |
| * + ? {n,m} | 0 次以上 / 1 次以上 / 0 或 1 次 / n 到 m 次 | \d{3,4} |
| ^ $ | 開頭 / 結尾(m 旗標時為每一行) | ^\d+$ |
| [\u4e00-\u9fff] | 一個中文字(常用漢字範圍) | [\u4e00-\u9fff]+ |
| ( ) (?: ) | 擷取群組 / 非擷取群組 | (09\d{2})-(\d{6}) |
| (?<名稱> ) | 具名群組 | (?<year>\d{4}) |
| (?= ) (?! ) | 正向預查 / 負向預查 | \d+(?=元) |
旗標說明
- g(global):找出所有符合的部分,而不只第一個。
- i(ignoreCase):不區分大小寫。
- m(multiline):^ 與 $ 符合每一行的開頭與結尾。
- s(dotAll):點(.)也符合換行字元。
- u(unicode):把表情符號等 4 位元組字元視為一個字,並可使用 \p{…} 語法,例如 \p{Script=Han} 代表漢字。
- y(sticky):只在目前位置(lastIndex)嘗試比對。
小心災難性回溯(ReDoS)
像 ^(a+)+$ 這種重複中又有重複的巢狀模式,遇到不符合的輸入時,嘗試的組合會呈指數成長,甚至讓伺服器停擺,這就是 ReDoS 攻擊。若在本工具中發生逾時,請移除巢狀重複,例如把 (a+)+ 改成 a+。
常見問題
身分證字號範本能確認號碼是真的嗎?
不能。正規表示式只檢查格式(英文字母+1 或 2+8 位數字),無法計算檢查碼,也無法確認號碼是否真實存在。為保護個資,請勿輸入真實號碼;輸入內容也不會傳送到伺服器。
結果與 Java、Python 的正規表示式相同嗎?
基本語法大致相同,但細節可能有差異。例如 Python 的具名群組寫成 (?P<名稱>…),Java 字串中的反斜線要寫兩次(\\d)。本工具以 JavaScript(ECMAScript)為準。
怎麼檢查字串是否只有中文?
可以使用 ^[\u4e00-\u9fff]+$;若要涵蓋所有漢字,開啟 u 旗標後使用 ^\p{Script=Han}+$。
符合的項目太多會怎樣?
最多找出並標示 5,000 筆,清單表格則顯示前 300 筆。