反向引用:\1, \2
語法
正則表示式
\N
注意:N 不是一個字面字元。
引數
N-
一個正整數,指代捕獲組的編號。
描述
反向引用是一種匹配與先前捕獲組匹配的相同文字的方法。捕獲組從 1 開始計數,因此第一個捕獲組的結果可以用 \1 引用,第二個用 \2,依此類推。\0 是 NUL 字元的字元轉義。
在不區分大小寫的匹配中,反向引用可以匹配與原始文字大小寫不同的文字。
js
/(b)\1/i.test("bB"); // true
反向引用必須引用一個存在的捕獲組。如果它指定的數字大於捕獲組的總數,則會丟擲語法錯誤。
js
/(a)\2/u; // SyntaxError: Invalid regular expression: Invalid escape
在非 Unicode 模式下,無效的反向引用會變成傳統的八進位制轉義序列。這是一種為了 Web 相容性而棄用的語法,你不應該依賴它。
js
/(a)\2/.test("a\x02"); // true
如果引用的捕獲組未匹配(例如,因為它屬於或運算子中未匹配的替代),或者該組尚未匹配(例如,因為它位於反向引用的右側),反向引用始終成功(如同它匹配空字串)。
js
/(?:a|(b))\1c/.test("ac"); // true
/\1(a)/.test("a"); // true
示例
配對引號
以下函式匹配字串中的 title='xxx' 和 title="xxx" 模式。為了確保引號匹配,我們使用反向引用來引用第一個引號。訪問第二個捕獲組 ([2]) 將返回匹配引號字元之間的字串
js
function parseTitle(metastring) {
return metastring.match(/title=(["'])(.*?)\1/)[2];
}
parseTitle('title="foo"'); // 'foo'
parseTitle("title='foo' lang='en'"); // 'foo'
parseTitle('title="Named capturing groups\' advantages"'); // "Named capturing groups' advantages"
匹配重複單詞
以下函式查詢字串中的重複單詞(通常是拼寫錯誤)。請注意,它使用 \w 字元類轉義,它只匹配英文字母,不匹配任何帶重音的字母或其他字母。如果你想要更通用的匹配,你可能需要按空格拆分字串,並遍歷結果陣列。
js
function findDuplicates(text) {
return text.match(/\b(\w+)\s+\1\b/i)?.[1];
}
findDuplicates("foo foo bar"); // 'foo'
findDuplicates("foo bar foo"); // undefined
findDuplicates("Hello hello"); // 'Hello'
findDuplicates("Hello hellos"); // undefined
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # prod-DecimalEscape |
瀏覽器相容性
載入中…