跳到主要內容

正規表示式測試

在瀏覽器中測試 JavaScript 正規表示式,即時標示符合的文字、顯示擷取群組,並以白話說明each部分的意思。

JavaScript(ECMAScript)正規表達式語法與你的瀏覽器、Node.js 和 Deno 使用相同的引擎
//g

$1 或 $<name> 會插入群組,$& 為整個符合的內容,$` 和 $' 分別為符合內容前後的文字,$$ 為一個錢字號。

符合結果和擷取群組會顯示在這裡。

在瀏覽器中執行・不需上傳運作方式

Regex 測試器 使用方法

  1. 1

    輸入規則

    輸入不含斜線的正規表達式,旗標則在下方的切換開關中設定。

  2. 2

    加入測試字串

    貼上要搜尋的文字,符合結果會在你輸入時即時醒目標示,並連同捕獲群組一併列出。

  3. 3

    查看說明

    開啟「說明」,用白話逐一了解每個標記,看清楚規則實際的作用。

  4. 4

    預覽取代結果

    輸入使用 $1 或 $<name> 的取代內容查看結果,再從「程式碼」分頁複製程式碼。

限制與 Pro

免費使用,不需註冊:最多計算 100,000 筆符合結果,醒目標示 2,000 筆,表格列出 200 筆;醒目標示支援最長 200,000 個字元的測試字串,每次執行在 1.5 秒後會被中止。

Pro 可移除廣告;各方案的測試工具功能完全相同。 查看 Pro

關於 Regex 測試器

這個測試工具使用瀏覽器內建的 JavaScript(ECMAScript)正規表達式引擎來執行你的規則,Node.js、Deno、Bun 和所有網頁用的都是同一種引擎,所以在這裡符合的結果,放進你的程式裡也會一樣。輸入規則和測試字串後,所有符合結果會隨著輸入即時醒目標示,並列出位置表、編號群組與具名群組;開啟 d 旗標時,還會顯示每個群組的起訖位置。

八個旗標都能切換:g 找出全部符合、i 忽略大小寫、m 讓 ^ 和 $ 以行為單位、s 讓 . 也能符合換行、u 支援完整 Unicode 與 \p{…} 屬性跳脫、v 支援方括號內的交集與差集、y 為黏性比對、d 提供索引。「取代」可預覽 String.prototype.replace 的結果,支援 $1、$<name>、$& 等代換符號,「程式碼」分頁則提供對應的字面值、matchAll 與 RegExp() 範例。

「說明」分頁會把規則拆成一個個標記,用白話說明各自的作用,包括群組、環視、字元類別、量詞,以及是貪婪還是惰性;「速查表」可將常用標記插入游標位置。

比對在背景的 Web Worker 中執行,上限 1.5 秒。像 (a+)+b 對上一長串 a 這類會災難性回溯的規則,會被中止並附上說明,不會讓分頁當機。為 PCRE、Python 或 .NET 寫的規則可能需要修改,因為 JavaScript 沒有佔有量詞、原子群組、遞迴,也不支援 \A 和 \Z。

隱私

規則和測試字串只會留在這個瀏覽器分頁中:比對在本機的 Web Worker 裡進行,你輸入的內容不會被上傳、記錄或儲存,所以拿真實的日誌內容或客戶資料來測試也很安心。

功能

真正的 JS 引擎

比對方式與瀏覽器和 Node.js 中的 RegExp 完全相同,包括 v 旗標的集合與具名群組。

逐一標記說明

每個群組、字元類別、錨點和量詞都用白話說明。

回溯保護

比對在 Worker 中執行,上限 1.5 秒,有問題的規則不會讓頁面當機。

Regex 測試器:常見問題

這個測試工具使用哪一種正規表達式語法?
使用 JavaScript 的語法,也就是 ECMAScript 標準,由你的瀏覽器實作。支援後行斷言、具名群組、Unicode 屬性跳脫和 v 旗標,但不支援 PCRE 的佔有量詞、原子群組、遞迴或條件式。Python 的 (?P<name>…) 在這裡要寫成 (?<name>…)。
為什麼我的規則只找到第一筆符合結果?
沒有 g 旗標時,JavaScript 找到第一筆就會停止:exec 和 match 只回傳一個結果,replace 也只會取代第一個。開啟 g 就能找出並取代所有符合結果。黏性的 y 旗標則不同,它只會從上一筆結束的位置開始比對,適合用在詞法分析器。
什麼是災難性回溯?
當規則能用許多不同方式符合同一段文字時,例如 (a+)+ 或 (.*)* 這類巢狀量詞,一旦比對失敗,引擎會嘗試所有組合,耗時會隨輸入長度呈指數成長。這裡會在 1.5 秒後中止並顯示警告。解決方法是讓各選項互斥,例如在逗號前用 [^,]* 取代 .*。
取代時要怎麼使用捕獲群組?
編號群組寫 $1、$2 等,具名群組如 (?<year>\d{4}) 則寫 $<name>。$& 會插入整段符合內容,$` 是符合內容之前的文字,$' 是之後的文字,$$ 則輸出一個美元符號。點選「試試範例」會載入日期規則,用這種方式重新排列年、月、日。
什麼時候需要 u 或 v 旗標?
文字含有表情符號或其他基本多文種平面以外的字元時,請用 u,讓 . 和量詞把它們視為一個字元,也才能使用 \p{L} 這類 Unicode 屬性。較新的 v 旗標包含 u 的全部功能,並在方括號內加入集合運算,例如 [\p{L}--[a-z]] 可取得非 ASCII 字母。兩個旗標不能同時使用。