国产chinesehdxxxx野外,国产av无码专区亚洲av琪琪,播放男人添女人下边视频,成人国产精品一区二区免费看,chinese丰满人妻videos

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

2023-02-17 11:02 更新

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

按編號反向引用:\N

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

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

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

如何找到它們?

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

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

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

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

正如我們所看到的,該模式找到了一個(gè)開頭的引號 ",然后文本被匹配,直到另一個(gè)引號 ',該匹配結(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á)式引擎會(huì)找到第一個(gè)引號 (['"]) 并記住其內(nèi)容。那是第一個(gè)捕獲組。

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

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

請注意:

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

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

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

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

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

要引用命名的捕獲組,我們可以使用:\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

公眾號
微信公眾號

編程獅公眾號