使用方式
- 在 Pattern 欄位輸入正規表示式,不需加上前後斜線。
- 勾選所需的旗標。g(global,全域)會尋找所有符合項目,而不只第一個。
- 貼上要搜尋的文字。符合項目會以醒目方式標示,並逐一列出索引和擷取群組。
- 也可以輸入替換字串,例如 $2-$1,預覽 String.replace 的結果。
運作方式
此測試工具使用瀏覽器內建的 RegExp 物件執行模式,因此結果與該瀏覽器中的 JavaScript(ECMAScript)程式碼完全相同。其他語言使用不同的 regex 方言:PCRE(PHP)、Python 的 re 模組、Java 和 .NET 都支援 JavaScript 不支援的功能,例如佔有式量詞(a++)、原子群組((?>…))、(?i) 這類行內修飾符,以及遞迴;它們在 \A 和 \Z 錨點等細節上也有所不同。若要在其他語言中使用,請先在該語言中測試模式。所有目前版本的瀏覽器都支援後行斷言((?<=…))、命名群組((?<name>…))和 Unicode 屬性跳脫(搭配 u 旗標使用的 \p{L})。
未使用 g 或 y 旗標時,只會找到第一個符合項目,與 RegExp.exec 的行為相同。零長度符合項目(例如 ^ 或 \b 的結果)會列出,但不會醒目顯示;每次找到後,搜尋會向前移動一個字元(使用 u 旗標時移動一個碼位),與 String.matchAll 的行為相同。擷取群組會依編號顯示,若有定義名稱,也會依名稱顯示;未參與符合的群組會標示為沒有值,這與空的符合結果不同。
某些模式(例如在沒有符合項目的長行中使用 (a+)+$)需要指數級時間才能結束搜尋(災難性回溯)。為降低風險,系統會在您停止輸入片刻後才開始比對、只搜尋文字的前 100,000 個字元,且最多收集 1,000 個符合項目。病態模式仍可能讓分頁一時沒有回應;若發生這種情況,請簡化模式或縮短文字。
範例
擷取日期
在 “Due 2026-03-15, paid 2026-04-02” 上使用模式 (\d{4})-(\d{2})-(\d{2}) 並開啟 g 旗標,會找到兩個符合項目。群組 1 是年份;替換字串 $3.$2.$1 會將文字轉為 “Due 15.03.2026, paid 02.04.2026”。
使用命名群組,讓程式碼更易讀
在查詢字串 a=1&b=two 上使用 (?<key>\w+)=(?<value>[^&]*),會列出每組配對的 key 和 value,與 JavaScript 中 match.groups.key 和 match.groups.value 傳回的內容相同。
跨行搜尋,不區分大小寫
使用 g、i 和 m 旗標時,^error:.* 會比對每一行以 Error:、ERROR: 或 error: 開頭的記錄,因為 m 會讓 ^ 在每一行的開頭都符合。
常見問題
我的 regex 在 Python、PHP 或 Java 中也會有相同的效果嗎?
不一定。此工具使用 JavaScript 引擎。基本語法雖然相同,但佔有式量詞、原子群組、(?i) 這類行內旗標,以及某些跳脫序列只存在於其他方言中,且有些語法的行為也不相同。請務必在目標語言中測試。
為什麼只找到一個符合項目?
g(global,全域)旗標目前未開啟。未使用此旗標時,JavaScript 只會傳回第一個符合項目。勾選 g 即可尋找所有符合項目。
需要在模式前後輸入斜線嗎?
不用。只輸入模式即可,例如輸入 \d+,而不是 /\d+/g,並使用核取方塊選擇旗標。結果下方會顯示 JavaScript 字面值形式,方便複製到程式碼中。
為什麼使用我的模式後,頁面變得很慢?
(a+)+ 或 (.*)* 這類巢狀量詞,在找不到符合項目時,可能迫使引擎嘗試指數級數量的路徑。請讓模式更具體,例如將 .* 改成 [^,]*,或使用錨點。測試工具會將文字限制在 100,000 個字元以降低影響。
隱私權
您的模式和文字只會由瀏覽器中的 JavaScript 引擎處理,不會上傳、儲存或納入分析資料。