正規表達式測試(Regex Tester)

輸入規則和測試文字,馬上看到哪些地方符合、每個擷取群組(capture group)抓到什麼,也能試取代。本工具使用瀏覽器內建的 JavaScript(ECMAScript)正規表達式,與 PHP、Python 等語言的語法有些差異,例如命名群組 JavaScript 寫成 (?<name>…),Python 寫成 (?P<name>…)。

內容只在你的瀏覽器裡處理,不會上傳。測試文字上限 1,048,576 個字元(約 1 MB)。

廣告

本工具結果僅供參考。要做重大決定前,請先請教專業人士;本站不對使用結果負責。

1規則與旗標

/ /g

旗標(flags)寫在結尾斜線後面。u 與 v 不能同時使用,勾一個會自動取消另一個。

2比對結果

位置(index)是 JavaScript 字串索引,從 0 起算;emoji 等字元可能占 2 個位置。零長度比對用紅色細線標示。

3取代

可用 $&(整段比對)、$1~$99(第 n 組)、$<name>(命名群組)、$$(字面的 $)、$`(比對前的文字)、$'(比對後的文字)。勾 g 全部取代,沒勾只取代第一筆。

本工具結果僅供參考。要做重大決定前,請先請教專業人士;本站不對使用結果負責。

廣告

怎麼用

語法速查表
語法說明例子
.除換行外的任一字元a.c 比對 abc
\d一個數字\d+ 比對 2026
\w英數字或底線\w+ 比對 user_1
\s空白、換行、Taba\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 和其他語言的差異

為什麼頁面說比對超時

有些規則寫法會讓引擎在比對失敗時反覆嘗試很多種拆分方式,這叫回溯(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 個位置,所以看到的位置可能和你用眼睛數的字數不同。

資料來源

本頁資料查核日期:2026 年 10 月。比對結果依你目前使用的瀏覽器內建 JavaScript 正規表達式引擎;範例規則只檢查格式,不代表號碼或資料真實存在、有效。

其他免費工具

其他分類