UltKit

正規表示式測試器(Regex)

輸入模式、勾選需要的旗標並貼上文字:輸入的同時,每個比對結果都會即時醒目標示,並列出其位置與擷取群組。模式直接在瀏覽器內建的 JavaScript 正規表示式引擎上執行,因此結果與你的程式碼一致,文字也始終留在你的裝置上。

旗標

0 個字元 · 0 個字詞 · 0 行

符合的內容會在此標示。

0 個字元 · 0 個字詞 · 0 行

完全在此瀏覽器分頁中執行,您的文字不會被上傳或儲存。

JavaScript 正規表示式語法

「第一個符合項目」欄是以建置本頁的 JavaScript 引擎,對各模式的文字實際執行後得出的。

權杖意義模式文字第一個符合項目
\d數字 0–9/\d+/Order 66 shipped66
\w字母、數字或底線(ASCII)/\w+/snake_case-idsnake_case
\s空白字元,包括 Tab 與換行/\s+/two spaces
.除換行以外的任何字元(使用 s 時除外)/a.c/abc a-cabc
^ $輸入的開頭與結尾(使用 m 時為行首與行尾)/^\w+$/singlesingle
[abc]列出的字元之一/[aeiou]/rhythm and bluesa
[^abc]未列出的任何字元/[^0-9]+/2026-10-18-
* + ?0 次以上、1 次以上、0 或 1 次/colou?r/color colourcolor
{n,m}n 到 m 次/\d{2,4}/7 42 1999 12345642
(…)擷取群組/(\d+)px/width: 320px320px
(?<name>…)具名擷取群組/(?<h>\d\d):(?<m>\d\d)/at 09:4509:45
(?:…)不擷取的群組/(?:ab)+/ababab!ababab
a|b任一邊/cat|dog/hotdogdog
\b字詞邊界/\bcat\b/concat catcat
(?=…)後面接著(前瞻)/\d+(?=%)/50 of 75%75
(?<!…)前面不是(否定後顧)/(?<!\$)\b\d+/$30 or 4040
\p{L}任何 Unicode 字母(需搭配 u)/\p{L}+/unaïve 東京naïve

六個旗標及其作用

g(全域)會找出所有符合的結果,而不是找到第一個就停止;沒有它的話,結果清單只會有一筆。i 忽略大小寫。m(多行)會讓 ^ 和 $ 比對每一行的開頭與結尾,而不只是整段文字的開頭與結尾,要找行尾空白這類樣式時就需要它。s(dotAll,ES2018 新增)讓 . 也能比對換行。u(unicode)以碼位處理文字,因此一個表情符號只算一個字元,同時啟用 \p{L} 這類屬性跳脫,可比對任何文字系統中的任何字母。y(sticky)只在目前位置精準比對,是詞法分析器使用的模式。JavaScript 還有用於比對索引的 d,以及用於字元類別集合運算的 v;本測試工具只提供上述六種。

在測試文字下方,每筆符合結果都會顯示其索引與群組。編號群組來自一般括號,(?:…) 為不擷取的群組,而 (?<year>\d{4}) 會建立具名群組,並以名稱顯示,ISO 日期範例就是如此。常用樣式選單會插入經過測試的起點樣式,包括電子郵件地址、URL、IPv4 位址、十六進位色碼、UUID、重複單字與行尾空白。請把電子郵件樣式當作初步檢查,而不是驗證:完整的地址語法寬鬆得多,真正的測試只有實際寄出一封信。

後行斷言(lookbehind)與災難性回溯

環顧(lookaround)會檢查某個位置前後的內容,而不消耗字元。先行斷言 (?=…) 與 (?!…) 一直都是 JavaScript 的一部分;後行斷言 (?<=…) 與 (?<!…) 於 ES2018 出現,2023 年 Safari 16.4 推出後,所有主流瀏覽器都已支援。因此 (?<=\$)\d+ 能在 "$42" 中找到 42,且不包含美元符號。與許多其他引擎不同,JavaScript 允許任意長度的後行斷言。

JavaScript 引擎採用回溯機制:某條路徑失敗時,會退回去嘗試其他選項。像 (a+)+$ 這種巢狀量詞,會讓同一段文字有指數級數量的切分方式,因此 30 個 a 後面接一個 x 的字串可能要跑上數秒,再多幾個字母就可能要數小時。這就是災難性回溯,在伺服器上則會成為 ReDoS(阻斷服務攻擊);2019 年 7 月 2 日,Cloudflare 就因一條有這種缺陷的 WAF 規則,導致網路中斷約半小時。由於本測試工具在你的分頁中執行,這類樣式可能讓頁面凍結;請重新載入並改寫,讓兩個量詞不會搶同一批字元,例如用 [^,]* 這種更精確的字元類別取代 .*,或加上錨點。若要編輯文字本身而不是比對文字,請參閱文字工具;更多開發者工具在開發者工具頁面。

常見問題

為什麼我的正規表示式只找到一個比對結果?
可能是沒有開啟 g 旗標。沒有它的話,引擎在第一個符合結果後就會停止。勾選 g 即可列出所有出現的位置;單獨使用 y 旗標也能找到多個,但前提是它們必須彼此緊接。
在 JavaScript 中,\d 會比對其他文字系統的數字嗎?
不是。在 JavaScript 中,\d 只代表 0 到 9,\w 只代表 ASCII 字母、數字與底線,即使加上 u 旗標也一樣。若要處理其他文字系統,請搭配 u 使用 \p{Nd} 或 \p{L}。
在這裡測試的模式,在 Python 或 PHP 中會有相同結果嗎?
基本語法可以沿用,但細節不同:Python 的具名群組寫成 (?P<name>…),PHP 與 Python 支援 JavaScript 沒有的佔有量詞,後行斷言的規則也各不相同。請在目標引擎中重新測試。
如何比對字面上的點號或括號?
用反斜線跳脫:\. 比對句點,\[ 比對左方括號。在字元類別內,大多數符號本來就是字面意思,所以 [.] 同樣只會比對句點。
為什麼我在輸入模式時頁面卡住了?
該樣式可能對你的文字觸發了災難性回溯。請重新載入,然後避免 (.*)* 或 (a+)+ 這類巢狀量詞,並讓每個部分盡可能少比對。