語言:繁體中文

tools / regex

regex/

JavaScript 正規表示式即時測試:標示比對結果、列出擷取群組、預覽取代結果。

常用

測試文字

比對標示


      

比對清單

#位置比對擷取群組

取代

常見問題

這個工具用的是什麼正規表示式引擎,和 Python、PCRE 一樣嗎

用的是瀏覽器內建的 JavaScript 正規表示式,和 Python、PCRE、Java 的語法不完全相同。例如具名群組要寫成 (?<name>...),不是 Python 的 (?P<name>...);開頭的 (?i) 這類內嵌旗標不支援,忽略大小寫請勾選 i;佔有量詞和原子群組也沒有。後行斷言這類較新的語法能不能用,取決於你目前使用的瀏覽器。

從程式碼裡複製的正規表示式為什麼比對不上

多半是把兩側的斜線、結尾的旗標或跳脫用的反斜線一起複製了。輸入框裡只寫兩條斜線中間的內容,結尾的 g、i 等旗標在右邊勾選。從 JavaScript 字串裡複製的,要把 \\d+ 改成 \d+,輸入框裡不需要再跳脫一次反斜線。

為什麼只比對到一個,或者 . 和 ^ $ 的表現不對

先檢查輸入框右邊的旗標。沒勾 g 時只取第一個比對結果,清單標題裡會註明。點號預設不比對換行,勾上 s 才行;^ 和 $ 預設只認整段文字的開頭和結尾,要逐行比對就勾 m。y 是黏性模式,比對必須從開頭起一個緊接一個,平時不用勾。

提示「比對超過 1.5 秒已中止」怎麼辦

代表這個正規表示式在你的文字上回溯得太多,需要改寫。典型例子是 (a+)+ 這種巢狀量詞,遇到一段無法比對的長文字,耗時會成倍增加。頁面把正規表示式放在背景執行緒裡執行,超過 1.5 秒就直接終止,所以頁面不會當機。把量詞寫具體、去掉巢狀,或換成更明確的字元範圍,通常就能解決。

比對很多或文字很長會怎樣

標示和清單最多顯示前 1000 處,超出時會提示,取代結果不受這個上限影響。文字超過 20 萬個字元時,會等你停止輸入約 0.4 秒再計算。除此之外沒有設定其他長度限制,實際快慢取決於正規表示式本身。

取代範本怎麼寫

用的是 JavaScript 的取代語法:$1、$2 表示第幾個擷取群組,$<name> 表示具名群組,$& 表示整段比對,$$ 表示字面上的美元符號。範本留空就是把比對到的內容刪掉。沒開 g 時只取代第一處。

內建的手機號碼、身分證等範例可以直接拿去做驗證嗎

只能當起點,不是嚴格驗證。手機號碼範例認 1 開頭、第二位是 3 到 9 的 11 位數字,不處理區碼。身分證範例只檢查 18 位的格式,日期按 01 到 31 日放行,不驗證最後一位檢查碼,也不核對地區碼是否存在。電子郵件和 URL 範例只涵蓋常見寫法,URL 只認 http 和 https。點選範例會取代輸入框裡的正規表示式,並把旗標重設為只勾 g。

輸入的文字會上傳嗎

不會。正規表示式在瀏覽器的背景執行緒裡執行,測試文字、正規表示式和取代範本都不會傳到伺服器,頁面本身也不會儲存你的輸入。