99re热视频这里只精品,久久久天堂国产精品女人,国产av一区二区三区,久久久精品成人免费看片,99久久精品免费看国产一区二区三区

Javascript 模式中的反向引用:\N 和 \k<name>

2023-02-17 11:02 更新

我們不僅可以在結(jié)果或替換字符串中使用捕獲組 ?(...)? 的內(nèi)容,還可以在模式本身中使用它們。

按編號反向引用:\N

可以使用 \N 在模式中引用一個組,其中 N 是組號。

為了弄清這有什么用,讓我們考慮一個任務(wù)。

我們需要找到帶引號的字符串:單引號 '...' 或雙引號 "..." —— 應(yīng)匹配這兩種變體。

如何找到它們?

我們可以將兩種引號都放在方括號中:['"](.*?)['"],但它會找到帶有混合引號的字符串,例如 "...' 和 '..."。當(dāng)一種引號出現(xiàn)在另一種引號內(nèi),比如在字符串 "She's the one!" 中時,便會導(dǎo)致不正確的匹配:

let str = `He said: "She's the one!".`;

let regexp = /['"](.*?)['"]/g;

// 不是我們想要的結(jié)果
alert( str.match(regexp) ); // "She'

正如我們所看到的,該模式找到了一個開頭的引號 ",然后文本被匹配,直到另一個引號 ',該匹配結(jié)束。

為了確保模式查找的結(jié)束引號與開始的引號完全相同,我們可以將其包裝到捕獲組中并對其進(jìn)行反向引用:(['"])(.*?)\1。

這是正確的代碼:

let str = `He said: "She's the one!".`;

let regexp = /(['"])(.*?)\1/g;

alert( str.match(regexp) ); // "She's the one!"

現(xiàn)在可以了!正則表達(dá)式引擎會找到第一個引號 (['"]) 并記住其內(nèi)容。那是第一個捕獲組。

在模式中 \1 表示“找到與第一組相同的文本”,在我們的示例中為完全相同的引號。

與此類似,\2 表示第二組的內(nèi)容,\3 —— 第三分組,依此類推。

請注意:

如果我們在捕獲組中使用 ?:,那么我們將無法引用它。用 (?:...) 捕獲的組被排除,引擎不會記住它。

不要搞混了:在模式中用 ?\1?,在替換項(xiàng)中用:?$1?

在替換字符串中我們使用美元符號:$1,而在模式中 —— 使用反斜杠 \1。

按命名反向引用:\k<name>

如果一個正則表達(dá)式中有很多括號,給它們起個名字會便于引用。

要引用命名的捕獲組,我們可以使用:\k<name>

在下面的示例中,帶引號的組被命名為 ?<quote>,因此反向引用為 \k<quote>

let str = `He said: "She's the one!".`;

let regexp = /(?<quote>['"])(.*?)\k<quote>/g;

alert( str.match(regexp) ); // "She's the one!"


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號