日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

正则表达式的捕获性分组/反向引用

發(fā)布時間:2023/12/3 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 正则表达式的捕获性分组/反向引用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 分組
  • 捕獲性分組和反向引用

分組

正則的分組主要通過小括號來實現(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)容。

我們分析下匹配過程:

  • ([a-z]+) 匹配到位置 3 的 . 時失敗了,于是成功匹配到字符串 www,接著把控制權(quán)給 \.
  • \. 匹配 . 成功,然后把控制權(quán)給 \1
  • \1 引用了 ([a-z]+) 匹配到的內(nèi)容,也就是 www,所以就是 www 去匹配后面的字符串,w 匹配 g 失敗,整個表達式匹配失敗,匹配失敗的位置是 0,然后從位置 1 開始第 2 次的迭代匹配;
  • 重復(fù)上面的過程,直到第 5 次迭代匹配,從位置 4 開始匹配,([a-z]+) 成功匹配到了 google\. 成功匹配到了 .\1 這是引用 google,所以成功匹配了 google,整個正則表達式成功匹配 1 次,接著繼續(xù)第 6 次迭代匹配失敗,第 7 次迭代匹配也失敗,最后匹配結(jié)束;
  • 最終正則表達式成功匹配了字符串 google.google,開始位置 4,結(jié)束位置 17,([a-z]+) 匹配 google\. 匹配 .\1 匹配 google
  • $1 引用的就是 ([a-z]+) 匹配到的內(nèi)容,即 google,所以源字符串中的 google.google 被替換成 google,最后得到字符串 www.google.com,賦值給變量 output,所以最終輸出變量 output 的結(jié)果就是 www.google.com
  • 總結(jié)

    以上是生活随笔為你收集整理的正则表达式的捕获性分组/反向引用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。