正規表示式測試

輸入正規表示式與測試字串,即時標示符合的部分,並列出擷取群組、具名群組與取代結果。手機號碼、身分證字號、統一編號、Email 等範本一鍵帶入。

比對結果 —

符合清單 · 群組

#位置符合內容群組

沒有符合的部分。


  

什麼是正規表示式測試?

正規表示式(Regular Expression,簡稱 regex)是用來尋找或取代符合特定規則之字串的模式語言,常用於表單驗證、日誌分析與大量文字取代。本工具使用瀏覽器內建的 JavaScript 正規表示式引擎,結果與 JavaScript、TypeScript 程式碼完全相同。

比對在獨立執行緒(Web Worker)中進行,即使寫錯的模式執行過久,也會在 1.5 秒後自動中止,畫面不會卡住。

使用方法

  1. 從常用範本選擇範例,或直接在正規表示式欄位輸入。不需要加前後的斜線(/)。
  2. 點選需要的旗標(g、i、m、s、u、y)來開啟或關閉。
  3. 輸入測試字串後,符合的部分會以顏色標示,下方清單會列出位置與群組值。
  4. 在取代字串中使用 $1、$<名稱>、$&,即可預覽取代後的結果。

正規表示式基本語法

語法意義範例
\d \w \s數字 / 英數字與 _ / 空白\d{3}
.換行以外的任意字元(開啟 s 旗標時也含換行)a.c
* + ? {n,m}0 次以上 / 1 次以上 / 0 或 1 次 / n 到 m 次\d{3,4}
^ $開頭 / 結尾(m 旗標時為每一行)^\d+$
[\u4e00-\u9fff]一個中文字(常用漢字範圍)[\u4e00-\u9fff]+
( ) (?: )擷取群組 / 非擷取群組(09\d{2})-(\d{6})
(?<名稱> )具名群組(?<year>\d{4})
(?= ) (?! )正向預查 / 負向預查\d+(?=元)

旗標說明

  • g(global):找出所有符合的部分,而不只第一個。
  • i(ignoreCase):不區分大小寫。
  • m(multiline):^ 與 $ 符合每一行的開頭與結尾。
  • s(dotAll):點(.)也符合換行字元。
  • u(unicode):把表情符號等 4 位元組字元視為一個字,並可使用 \p{…} 語法,例如 \p{Script=Han} 代表漢字。
  • y(sticky):只在目前位置(lastIndex)嘗試比對。

小心災難性回溯(ReDoS)

像 ^(a+)+$ 這種重複中又有重複的巢狀模式,遇到不符合的輸入時,嘗試的組合會呈指數成長,甚至讓伺服器停擺,這就是 ReDoS 攻擊。若在本工具中發生逾時,請移除巢狀重複,例如把 (a+)+ 改成 a+。

常見問題

身分證字號範本能確認號碼是真的嗎?

不能。正規表示式只檢查格式(英文字母+1 或 2+8 位數字),無法計算檢查碼,也無法確認號碼是否真實存在。為保護個資,請勿輸入真實號碼;輸入內容也不會傳送到伺服器。

結果與 Java、Python 的正規表示式相同嗎?

基本語法大致相同,但細節可能有差異。例如 Python 的具名群組寫成 (?P<名稱>…),Java 字串中的反斜線要寫兩次(\\d)。本工具以 JavaScript(ECMAScript)為準。

怎麼檢查字串是否只有中文?

可以使用 ^[\u4e00-\u9fff]+$;若要涵蓋所有漢字,開啟 u 旗標後使用 ^\p{Script=Han}+$。

符合的項目太多會怎樣?

最多找出並標示 5,000 筆,清單表格則顯示前 300 筆。