正则表达式的捕获性分组/反向引用
文章目錄
- 分組
- 捕獲性分組和反向引用
分組
正則的分組主要通過小括號來實現(xiàn),括號包裹的子表達式作為一個分組,括號后可以緊跟限定詞表示重復(fù)次數(shù)。如下,小括號內(nèi)包裹的 abc 便是一個分組:
// (abc)+ 表示匹配一個或多個"abc",因為字符串"abc123"含有"abc",所以匹配成功一個"abc" /(abc)+/.test("abc123") == true那么分組有什么用呢? 一般來說, 分組是為了表示一個整體;除此之外,還有一個作用就是用于捕獲。
捕獲性分組和反向引用
捕獲性分組,通常由一對小括號加上子表達式組成。捕獲性分組會創(chuàng)建反向引用,每個反向引用都由一個編號來標(biāo)識,js 中主要是通過 $+編號 或者 \+編號 去引用分組的內(nèi)容,如下便是一個捕獲性分組的例子:
var color = "#808080"; var output = color.replace(/#(\d+)/,"$1"+"~~");// "$1"是反向引用,也可以寫成 "$1~~" // 單獨訪問變量$1,并輸出到控制臺 console.log(RegExp.$1);//808080 // 將變量output輸出到控制臺 console.log(output);//808080~~說明:
以上正則表達式中的 (\d+) 表示一個捕獲性分組,而 $1 則是反向引用,引用分組 (\d+) 捕獲到的內(nèi)容。整個正則表達式 #(\d+) 成功匹配到字符串 #808080。(\d+) 分組捕獲到的內(nèi)容就是 808080,所以由 $1 和 ~~ 組成的替換字符串是 808080~~。因此替換后的結(jié)果是 808080~~。
想要單獨獲取反向引用 $1 的值,可以使用表達式:RegExp.$1,RegExp.$1 指向該分組 (\d+) 捕獲到的內(nèi)容,該分組捕獲到的內(nèi)容就是 808080,所以訪問 RegExp.$1 獲取到的內(nèi)容 808080。
$+編號 只能在正則表達式之外使用。
實際上,捕獲性分組捕獲到的內(nèi)容不僅可以在正則表達式外部引用,還可以在正則表達式內(nèi)部引用。
var url = "www.google.google.com"; var re = /([a-z]+)\.\1/;//匹配到 google.google var output = url.replace(re,"$1");// 將 google.google 替換成 google console.log(RegExp.$1); console.log(output);如上代碼,正則式是 ([a-z]+).\1,其中的 \1 就是反向引用,引用誰?引用分組 ([a-z]+)所匹配到的內(nèi)容。
我們分析下匹配過程:
總結(jié)
以上是生活随笔為你收集整理的正则表达式的捕获性分组/反向引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。