怎麼用
- 第一步:在「規則」輸入正規表達式(Regular Expression),或從「常用範例」選一個。
- 第二步:貼上測試文字,需要的話勾選旗標。停止輸入 0.25 秒後會自動比對,符合的地方用色塊標示。
- 第三步:看上方結果表的位置與擷取群組,需要取代再填「取代為」,最後複製結果。
語法速查表
| 語法 | 說明 | 例子 |
|---|---|---|
| . | 除換行外的任一字元 | a.c 比對 abc |
| \d | 一個數字 | \d+ 比對 2026 |
| \w | 英數字或底線 | \w+ 比對 user_1 |
| \s | 空白、換行、Tab | a\sb 比對 a b |
| \b | 字詞邊界 | \bcat\b 比對單獨的 cat |
| ^ | 開頭(加 m 旗標則為每行開頭) | ^abc |
| $ | 結尾(加 m 旗標則為每行結尾) | abc$ |
| * | 前一項重複 0 次以上 | ab*c 比對 ac、abbc |
| + | 前一項重複 1 次以上 | ab+c 比對 abc、abbc |
| ? | 前一項 0 或 1 次 | colou?r 比對 color、colour |
| {n,m} | 前一項重複 n 到 m 次 | \d{2,4} 比對 12、123、1234 |
| [] | 括號內任一字元 | [abc] 比對 a、b 或 c |
| [^] | 不在括號內的任一字元 | [^0-9] 比對非數字 |
| () | 擷取群組,結果表會列出 | (\d+)-(\d+) |
| (?:) | 只分組、不擷取 | (?:ab)+ |
| (?<name>) | 命名群組 | (?<y>\d{4}) |
| | | 或 | cat|dog |
| \ | 跳脫特殊符號 | \. 比對句點本身 |
| (?=) | 前瞻:後面要接著 | \d+(?=元) 比對「元」前的數字 |
| (?!) | 否定前瞻:後面不能接著 | \d+(?!元) |
| (?<=) | 後顧:前面要有 | (?<=\$)\d+ 比對 $ 後的數字 |
| (?<!) | 否定後顧:前面不能有 | (?<!\$)\b\d+ |
JavaScript 和其他語言的差異
- 命名群組:Python 用 (?P<name>…),JavaScript 用 (?<name>…)。
- 旗標寫在結尾斜線後面,例如 /abc/gi;這個工具用勾選方式設定,上方規則欄會即時顯示目前的旗標。
為什麼頁面說比對超時
有些規則寫法會讓引擎在比對失敗時反覆嘗試很多種拆分方式,這叫回溯(backtracking)。例如規則 (a+)+$ 對文字 aaaaaaaaaaaaaaaaaaaaaaaaaaaa! 比對:最後的 ! 讓整體失敗,引擎會把前面的 a 用各種方式重新分組再試一次,a 越多越慢,可能卡住好幾秒甚至更久。
這個工具在背景執行緒(Web Worker)比對,超過 1.5 秒就把它終止並提示你,所以頁面不會當掉。遇到這種情況,可以縮短測試文字,或把巢狀的重複(例如 (a+)+)改寫成 a+。
相關工具
常見問題
正規表達式(Regular Expression)是什麼?
正規表達式,常簡稱 Regex,是用一串符號描述「文字長什麼樣子」的寫法,可以拿來找出、檢查或取代文字裡符合條件的部分。例如 \d+ 代表一個以上的數字。這個工具用的是瀏覽器內建的 JavaScript(ECMAScript)正規表達式。
g 旗標是什麼?
g 是全域(global)旗標,代表找出所有符合的地方,而不是找到第一個就停。沒有勾 g,比對結果和取代都只會處理第一筆。
為什麼我的規則在 Python 可以,在這裡不行?
這裡用的是 JavaScript 版本的語法,和 PHP(PCRE)、Python re、.NET 有些差異。例如命名群組,Python 寫成 (?P<name>…),JavaScript 要寫成 (?<name>…)。另外 JavaScript 的旗標寫在結尾斜線後面,這個工具用勾選的方式設定。
怎麼比對中文?
可以用 \p{Script=Han}+ 比對連續的漢字,但這種 Unicode 屬性寫法必須勾 u(或 v)旗標才能用。也可以直接把想找的中文字寫進規則,例如 正規表達式。常用範例下拉選單裡有「中文字」可以直接試。
為什麼結果只有一筆?
最常見的原因是沒有勾 g(全域)旗標,這時只會比對第一筆。把 g 勾起來,所有符合的地方都會被標示出來。如果規則開頭是 ^、結尾是 $,也要確認有沒有勾 m(多行)旗標,才能逐行比對。
我貼的測試文字會被上傳嗎?
不會。規則和測試文字只在你的瀏覽器裡處理,比對在瀏覽器的背景執行緒(Web Worker)執行,不會傳到伺服器,也不會被儲存。
為什麼頁面說「比對超過 1.5 秒已中止」?
有些規則遇到特定文字時會反覆嘗試大量組合(回溯),可能讓程式卡很久。為了不讓頁面當掉,比對超過 1.5 秒就會自動中止並提示你。可以先縮短測試文字,或改寫規則減少巢狀的重複(例如 (a+)+)。
位置(index)是怎麼算的?
位置是 JavaScript 字串索引,從 0 開始算。有些字元(例如 emoji)在 JavaScript 字串裡占 2 個位置,所以看到的位置可能和你用眼睛數的字數不同。
資料來源
- ECMA-262:RegExp Objects:旗標 d g i m s u v y、取代字串的特殊符號(GetSubstitution)
本頁資料查核日期:2026 年 10 月。比對結果依你目前使用的瀏覽器內建 JavaScript 正規表達式引擎;範例規則只檢查格式,不代表號碼或資料真實存在、有效。