語法
正則表示式
(?flags1:pattern)
(?flags1-flags2:pattern)
注意:JavaScript 只有“有界”修飾符形式,其中模式位於修飾符組內。大多數其他支援修飾符的語言都有“無界”形式,其中修飾符會一直應用到最近的包含組的末尾。
引數
描述
某些標誌會改變正則表示式語法元素的含義
i標誌透過使所有文字字元和字元類隱式為小寫來使正則表示式不區分大小寫。m標誌會改變輸入邊界斷言^和$的行為,使其除了匹配輸入字串的開頭和結尾之外,還匹配每一行的開頭和結尾。s標誌會改變萬用字元.字元的行為,使其匹配任何字元,包括行終止符。
有時,你可能希望這些更改只在正則表示式模式的特定部分生效。你可以透過將該部分包裝在修飾符中來實現。例如:
js
/(?i:Hello) world/;
在此正則表示式中,i 標誌僅對模式的 Hello 部分啟用。world 部分割槽分大小寫。因此,它匹配 Hello world、hello world 和 HELLO world,但不匹配 HELLO WORLD。以下是等效的,透過全域性啟用 i 標誌,然後為 world 部分停用它:
js
/Hello (?-i:world)/i;
flags1 和 flags2 引數可以包含 i、m 和 s 的任意組合。但是,flags1 和 flags2 之間的標誌必須都是唯一的——你不能兩次啟用或停用一個標誌,也不能先啟用一個標誌然後立即停用它。
flags1 和 flags2 引數是可選的,但至少一個必須非空。(?flags1-:pattern) 是一個只啟用標誌的修飾符(等同於 (?flags1:pattern))。(?-flags2:pattern) 是一個只停用標誌的修飾符。(?:pattern) 只是一個非捕獲組,而 (?-:pattern) 是一個語法錯誤。
其他標誌在修飾符中沒有意義,因此如果包含它們,則會是語法錯誤
示例
僅在字串開頭匹配多行格式
以下正則表示式定義了多行字串的格式。第一個 ^ 透過位於 (?-m:) 修飾符內部,表示整個輸入字串的開頭,而所有其他 ^ 字元表示一行的開頭。
js
const pattern = /(?-m:^)---\n^title:.*^slug:.*^---/ms;
const input = `---
title: "Modifier: (?ims-ims:...)"
slug: Web/JavaScript/Reference/Regular_expressions/Modifier
---`;
pattern.test(input); // true
// Extra line break at the start of string
const input2 = `\n${input}`;
pattern.test(input2); // false
不區分大小寫地匹配某些單詞
假設你要查詢所有名為 foo 或 bar 的變數宣告(因為它們是糟糕的名稱)。該單詞可能以任何大小寫形式出現,但你知道關鍵字始終是小寫,因此你可以這樣做:
js
const pattern = /(?:var|let|const) (?i:foo|bar)\b/;
pattern.test("let foo;"); // true
pattern.test("const BAR = 1;"); // true
pattern.test("Let foo be a number"); // false
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # prod-RegularExpressionModifiers |
瀏覽器相容性
載入中…