RevealTheme logo

正規表示式測試器

針對任意輸入測試JavaScript正規表示式。即時檢視符合項、擷取群組和取代結果。

0 處相符

如何使用本工具

  1. 1

    Type your regular expression into the pattern field (no slashes — enter the bare pattern).

  2. 2

    Set the flags in the small field beside it, such as g, i, m, or a combination like gi.

  3. 3

    Paste or type the text you want to search into the large input box below.

  4. 4

    Read the match count and each matched substring with its character index in the results panel; an invalid pattern shows the engine's error message instead.

什麼是正規表示式,以及如何讀懂它們?

正規表示式(regex)是一種用於在文字中搜尋模式的小型領域特定語言。每一種現代程式語言都有正規引擎;本工具使用JavaScript原生的RegExp,它遵循ECMAScript 2018+規範,支援諸如後行斷言、具名擷取群組、Unicode屬性逸出和dotAll旗標等現代功能。基本構件包括:字面字元符合其自身(正規'gato'符合單字gato);字元類別符合某個集合中的任意一個('[a-z]'符合小寫字母);數量詞控制重複(*零次或多次,+一次或多次,?零次或一次,{3,5}介於3到5次之間);錨點符合位置(^字串開頭,$結尾,\b單字邊界);分組擷取子符合項((gato|perro)符合任意一個,並擷取是哪一個);選擇結構提供二選一。正規表示式擅長剖析結構化但非語法性的文字(記錄檔、郵件、電話號碼、簡單的HTML屬性),而對真正遞迴的結構(完整的HTML、巢狀的JSON)則力不從心。對於那些情況,請使用剖析器。本測試器讓你能夠在即時回饋下迭代某個模式:更改正規表示式,符合項就會在每次按鍵時重新計算。

常見使用場景

  • 在傳送到伺服器之前,驗證使用者輸入的格式(電子郵件、電話號碼、郵遞區號)。

  • 從日誌檔案中擷取結構化資料(時間戳記、IP、狀態碼、請求路徑)。

  • 使用編輯器的正規表示式搜尋,在數百個檔案中進行尋找取代。

  • 為Nginx、Apache .htaccess或Vercel重寫編寫URL重寫規則。

  • 剖析那些用真正的剖析器顯得多餘的簡單類CSV格式。

  • 為HTML <input pattern="..."> 屬性建構表單驗證模式。

常見問題

支援哪些旗標?
g(global,全域:尋找所有符合項,而不僅是第一個)、i(不區分大小寫)、m(multiline,多行:^和$符合換行)、s(dotAll:.符合換行)、u(unicode:正確處理多位元組字元)、y(sticky,黏性:僅在lastIndex處符合)。透過將旗標連接在一起來組合它們:'gim'同時啟用全域+不區分大小寫+多行。
我該如何跨多行符合?
這是兩種不同的需求:'m'讓^和$符合換行(將每一行視為錨點的獨立字串)。's'讓.符合換行(否則.會符合除換行之外的一切)。如果你需要符合跨行的模式,請將兩者一起使用。
貪婪數量詞和惰性數量詞有什麼區別?
貪婪數量詞(*、+、{n,m})會盡可能多地符合。惰性數量詞(*?、+?、{n,m}?)則盡可能少地符合。經典例子:正規'<.*>'對'<a><b>'會符合整個'<a><b>';而'<.*?>'只符合'<a>'。
我什麼時候不應該使用正規表示式?
當結構是真正遞迴的時候(HTML、JSON、配對的括號)。當你需要正確處理每一種邊界情況的時候(剖析帶時區的日期、含撇號的名字)。當輸入的語法定義良好且已有剖析程式庫存在的時候。Stack Overflow上一個著名的回答:正規表示式擅長尋找模式,卻不擅長剖析語言。
什麼是具名擷取群組?
與其讓(\d{4})-(\d{2})-(\d{2})傳回編號的群組,不如使用(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2}),並透過match.groups.year來存取符合項。在真實程式碼中可維護性要高得多。
為什麼我的正規表示式在某些輸入下很慢?
災難性回溯。巢狀數量詞如(a+)+在面對對抗性輸入時可能耗費指數級的時間。請避免巢狀數量詞和相互重疊的選擇結構。JavaScript引擎沒有逾時機制,因此一個糟糕的正規表示式可能會掛起一個請求。在生產環境中,請使用npm的safe-regex套件來檢測有風險的模式。
這裡的結果會與我伺服器的正規引擎所做的相符嗎?
大體上會:主要的正規風格(PCRE、Python的re、Ruby的regex、Java)相似,但存在細微差異。後行斷言的語法、字元類別的行為以及Unicode的處理各不相同。為了在生產環境中保持一致,也請在目標語言中進行測試。

相關工具