JavaScript RegExp 實測 · 明示引擎與 UTF-16 座標
一次比對,是範圍、群組與引擎狀態的共同結果。
正規表示式沒有跨語言通用的唯一語意。這裡依照目前瀏覽器的 ECMAScript RegExp 執行,並以 UTF-16 索引呈現 flags、比對範圍、捕獲群組與替換結果;結果不代表 PCRE、Python 或伺服器環境。
ONLY
/(?<proto>https?):\/\/(?<host>[^/:\s]+)(?::(?<port>\d+))?(?:\/[^?\s]*)?(?<query>\?[^\s]*)?/dguINPUTVisit https://example.com:8080/docs next.Flag 狀態機
Flags 會改變語意與迭代方式,不是裝飾。
Indices
讓完整比對與捕獲群組可回報 [start, end) 範圍
全域比對
從 lastIndex 開始持續尋找後續結果
忽略大小寫
依目前引擎的大小寫對應規則執行
多行模式
^ 與 $ 也會辨識每行的邊界
DotAll
. 可以比對換行等行終止字元
Unicode
以 Unicode 碼點解析模式,結果位置仍是 UTF-16 索引
Unicode sets
提供集合運算與字串屬性;不可與 u 併用
Sticky
必須剛好從 lastIndex 命中;本頁沒有另設起點
捕獲群組明細
未參與比對不等於命中空字串;群組範圍需要 d flag。
0 · 完整比對[6, 35)https://example.com:8080/docs已參與1 · proto[6, 11)https已參與2 · host[14, 25)example.com已參與3 · port[26, 30)8080已參與4 · query(選用)—undefined未參與原生替換 · First/All
First 會移除 g,All 會補上 g;y 仍會限制黏著比對。
Visit https://example.com:8080/docs next.$<proto>://$<host>Visit https://example.com next.回溯隔離 Worker
50–10,000 ms 只是頁面執行預算,不是 ReDoS 安全證明。
/^(a+)+$/aaaaaaaaaaaaaaaaaaaaaaaaaaaa!每次執行都會建立可終止的 Worker;開始新任務時會終止舊 Worker。正數逾時值會夾在 50–10,000 ms,預設為 500 ms;0、負數或非數字目前不會建立逾時計時器。這個邊界只限制目前頁面的執行,不會分析模式複雜度,也不能證明在伺服器、其他引擎或攻擊輸入下沒有 ReDoS。