正規表示式測試
在瀏覽器本機測試 JavaScript 正規表示式,支援 g/i/m/s/u/y 旗標、比對數量、擷取群組、命名群組、行列位置與原生取代預覽。
/
/g
測試文字
字元
0 / 50,000
比對結果
輸入模式開始比對
取代文字
字元
0 / 50,000
取代預覽
快速開始
常見使用情境
資料擷取
用 (\\d{4}-\\d{2}-\\d{2}) 擷取日期,用 ([\\w.]+@[\\w.]+) 擷取電子郵件
格式驗證
寫好正規表示式後貼上多組樣本,快速確認模式是否精準命中目標格式
批次替換
用擷取群組重組內容。例如將「姓 名」改為「名, 姓」— 模式 (\\S+)\\s+(\\S+),替換 $2, $1
命名分組
以 (?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}) 擷取日期,再以 $<year>/$<month>/$<day> 重組
語法學習
輸入不同模式觀察比對行為,直觀理解量詞、錨點、字元類別的效果
多行處理
開啟 m 旗標後 ^ 和 $ 會按行比對,適合處理日誌、程式碼或設定檔
使用建議
限制與相容性
隱私與安全
常見問題
正規表示式(Regular Expression,簡稱 regex)是一種用特定語法描述文字模式的工具。你可以把它理解為「進階搜尋」——不是搜尋一個固定詞,而是搜尋符合某種規則的所有文字。\n\n例如 \\d{4}-\\d{2}-\\d{2} 可以比對所有「年-月-日」格式的日期,[\\w.]+@[\\w.]+ 可以比對電子郵件地址。正規表示式廣泛用於:文字搜尋與擷取、格式驗證、批次替換。\n\n幾乎所有程式語言(JavaScript、Python、Java、Go 等)和大量工具(VS Code、grep、sed)都支援正規表示式。本工具使用 JavaScript 的 RegExp 引擎,適合線上快速驗證和學習。
JavaScript 正規表示式預設只回傳第一個比對項,這是語言規範行為而非工具限制。點擊旗標列中的 g 即可開啟全域搜尋。\n\n需注意 g 和 y 的互動:g 從頭到尾掃描整段文字,而 y(定點比對)要求每次比對必須緊接上次比對的結尾——如果比對項之間有間隔字元,y 會在遇到第一個間隔時停止。通常只開 g 不開 y 就夠用了。
常見原因有四類: 1. 括號未配對:每個 ( 都必須有對應的 ),每個 [ 都必須有對應的 ]。IDE 可能會自動補全,但本工具仍會依照你輸入的模式測試。 2. 量詞位置錯誤:*、+、?、{n} 必須接在可重複的元素後面,*+ 或 ?* 這類組合無效;惰性量詞應寫成 *?、+?。 3. 轉義不完整:結尾單獨的 \ 無效,必須轉義具體字元,例如 \d、\n 或 \\。 4. Unicode 屬性未開啟 u 標誌:\p{L}、\p{Script=Han} 等 property escape 需要啟用 u 標誌。
這些引用來自 JavaScript 的 String.prototype.replace(): - $1、$2、...、$99:第 1 到第 99 個擷取群組的內容。 - $&:完整匹配文字。 - $`: 匹配位置之前的文字。 - $':匹配位置之後的文字。 - $<name>:命名擷取群組 (?<name>...) 的內容。 例如,模式 (\w+)\s(\w+) 匹配「hello world」後,用 $2-$1 替換會得到「world-hello」。如果替換文字裡需要字面量 $,請寫成 $$。
不同語言的正規表示式引擎主要有三類差異: 1. 語法支援不同:JavaScript 不支援 PCRE 的遞迴模式 (?R)、條件分支 (?(cond)yes|no) 或原子群組 (?>...);Python 的 re 模組也不支援這些,但第三方 regex 模組支援;Java 支援原子群組但不支援遞迴。 2. Unicode 處理不同:JavaScript 的 \w 主要匹配基本拉丁字母、數字和底線;開啟 u 不會讓它自動匹配中文。若要匹配 Unicode 字母,請使用 \p{L} 等 property escape 並啟用 u 標誌。 3. 換行語義不同:Python 的 . 預設不匹配 \n(與 JavaScript 相同),Java 的 Pattern.DOTALL 行為類似 JavaScript 的 s 標誌。建議先用本工具快速驗證 JavaScript RegExp,再用目標語言的實際引擎做最後確認。