正規表示式正式用在搜尋、篩選或批次處理前,先準備「應該匹配、接近邊界但仍合法、一定不該匹配」三組字串。只看到一個 email 被抓到,不能證明規則遇到日期、檔名或混合文字時不會誤判。
先把需求改寫成可判定的測試清單
好的 Regex 測試先有預期答案,才開始調整規則。把每個樣本標成應匹配或不應匹配,並寫清楚要驗證整個欄位,還是從一段長文字中找出片段。
假設任務是從客服匯出的文字找出聯絡信箱,可以先準備:
- 一般正例:
[email protected] - 邊界正例:
[email protected] - 明確反例:
service@example、@example.com - 上下文反例:
備註[email protected]舊資料 - 重複案例:同一段內出現兩個不同信箱
最後一個上下文案例特別重要。如果需求是驗證「整格只能有一個信箱」,首尾邊界可能合理;如果需求是從訊息中找出信箱,同樣的邊界就會漏抓。測試清單應先決定這件事,不要等畫面沒有反白才猜原因。
日期與檔名也需要自己的反例。格式為 YYYY-MM-DD 的字串可以加入 2026-07-31、2026/07/31、報價-2026-07-31-final.pdf 與 2026-02-31。最後一個案例提醒你:正規表示式可以檢查字元格式,卻不能單靠位數判斷日曆日期是否存在。
用 Regex 測試器逐項看匹配位置
Regex 測試器接受樣式、旗標和測試文字,使用瀏覽器的 JavaScript RegExp 即時反白匹配內容,並列出起始位置。它回答的是「這段規則選到了哪些字」,不會判斷選到的資料在業務上是否正確。
先貼入不含真實個資的代表樣本,再輸入規則。查看每一處反白的左右文字,而不是只看匹配數量;少吃一個字和多吃一個逗號,數量都可能仍顯示為一。若規則改過一次,就把三組樣本全部重看一次,避免修好漏抓卻產生新的誤抓。
旗標也是測試條件的一部分:
g會繼續尋找全部匹配;沒有g時,目前工具只顯示第一處。i忽略英文字母大小寫,適合不區分Error與error的搜尋。m讓^與$能針對多行文字的每一行判定。s讓點號涵蓋換行,可能使範圍跨過原本預期的段落。
每次切換旗標,都應留下至少一個會因此改變結果的樣本。若 i 加不加都得到相同畫面,測試清單可能根本沒有大小寫邊界;若使用 g,則要核對所有反白位置,不是看到數量增加就算完成。
分別檢查 email、日期與檔名規則的盲點
三種常見字串的「格式正確」含義不同,不能共用一套驗收標準。email 要區分大致結構與地址是否真能收信;日期要再經日期解析;檔名則要符合最終作業系統與接收程式的限制。
測 email 時,簡化規則可以找出常見錯字,但不等於完整標準驗證,也無法確認網域或信箱存在。正式註冊流程仍需由實際系統驗證,必要時寄送確認信。測日期時,加入月底、閏年與不可能日期,並在真正的程式流程用日期函式再驗證一次。
測檔名時,先決定是檢查基本名稱、完整檔名,還是包含資料夾的路徑。例如想找出結尾為 .csv 的檔名,點號必須視為字面上的點,而不是「任意字元」。測試清單要包含大寫副檔名、檔名中間出現 .csv、結尾多一個空白,以及看似相同但實際不是目標格式的名稱。
這個工具不會開啟資料夾、讀取檔案內容或替你改名。把副檔名文字改掉也不是格式轉換;要轉換檔案,仍需使用真正解析來源格式並產生新格式的流程。
真正處理前先保留原始資料與小批副本
Regex 測試通過只代表樣本中的匹配範圍符合預期,不代表批次替換、資料匯入或程式執行一定安全。進入真正流程前保留原始檔,先在小批副本執行,並記下使用的規則、旗標和預期變更數量。
目前 Regex 測試器只顯示匹配與位置,不提供替換結果。若要在編輯器或腳本執行替換,請在那個實際環境再驗證語法,因為 JavaScript、Python、PCRE 或其他引擎的功能與邊界可能不同。完成小批處理後,把修改前後的可公開文字貼到文字差異比對,確認新增與刪除只出現在預期位置。
若來源是 JSON,不要直接用 Regex 來證明整份結構有效。先用 JSON 格式化器驗證並排版不含秘密的樣本,再取出真正需要匹配的欄位。格式化器能指出 JSON 語法問題,但同樣不會替你確認欄位的商業規則。
用回歸樣本完成最後驗收
最後驗收應重跑固定樣本,並抽查實際輸出的開頭、中間與結尾。保留這份不含敏感資料的回歸清單,下次規則改動時才能知道舊案例是否被破壞。
完成前至少確認:
- 每個正例都有預期匹配,邊界正例沒有被意外排除。
- 每個反例都保持未匹配,標點和相鄰文字沒有被多吃。
- 實際環境使用相同的正規表示式引擎與旗標。
- 原始資料仍在,處理只發生在可回復的小批副本。
- 替換或篩選後的數量合理,差異結果已由人逐項確認。
匹配數突然變多或變少時,先停下並把那筆資料加入測試清單。比起臨時把規則放寬,新增一個能重現問題的反例更能避免下次再次誤判。
常見問題
為什麼 Regex 測試只反白第一處?
先檢查旗標是否包含 g。沒有全域旗標時,目前工具只列出第一處匹配;加入 g 後仍要逐一檢查每個位置。
正規表示式可以確認 email 真的存在嗎?
不可以。Regex 只能檢查文字結構,不能確認網域狀態、收信能力或地址擁有者;正式流程仍要使用系統驗證與確認機制。
日期符合格式,為什麼仍可能無效?
位數與分隔符正確不代表日曆日期存在。像 2026-02-31 可能通過簡單格式規則,但仍需日期解析邏輯判定。
這個工具可以直接批次替換文字嗎?
不可以。它只反白匹配並列出位置,不會產生替換結果、開啟檔案或修改資料。請在副本中使用真正的編輯環境執行。
同一條 Regex 為什麼在另一個程式結果不同?
目前工具使用 JavaScript RegExp。其他引擎支援的語法、旗標、Unicode 與邊界行為可能不同,最終規則必須在真正執行的環境再測一次。