最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js正則表達(dá)式之前瞻后顧與非捕獲分組

 更新時間:2021年10月14日 14:40:15   作者:zhuyinqinying  
話說自從學(xué)前端以來聽到過多次這樣的"笑話",程序員分為會正則的和不會正則的,可見正則的重要性,這篇文章主要給大家介紹了關(guān)于js正則表達(dá)式之前瞻后顧與非捕獲分組的相關(guān)資料,需要的朋友可以參考下

前瞻后顧與捕獲分組的結(jié)合使用

在現(xiàn)實的應(yīng)用場景中,捕獲分組或非捕獲分組通常被限制在前瞻后顧條件內(nèi),舉例來說,對數(shù)字12345678格式化,結(jié)果為12,345,678。其正則實現(xiàn)如下:

let formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

捕獲分組與非捕獲分組

為了理解前瞻與后顧,首先要先理解捕獲分組與非捕獲分組

在js中,

()表示捕獲分組,() 會把每個分組里的匹配的值保存起來,使用$n(n是一個數(shù)字,表示第n個捕獲組的內(nèi)容);

(?:)表示非捕獲分組,和捕獲分組唯一的區(qū)別在于,非捕獲分組匹配的值不會保存起來。

以formatSum 表達(dá)式為例,(?=(?:\d{3})+(?!\d)) ,(?:\d{3}) ,(?!\d) 都是分組,其中第二個分組是非捕獲分組。

前瞻、后顧與負(fù)前瞻、負(fù)后顧

在上述的formatSum表達(dá)式中,用到了 ‘?=‘與'?!',這就是所謂的前瞻與負(fù)前瞻了。為了方便理解,我們以一個簡單的例子入手。

// 前瞻:
A(?=B)   //查找B前面的A
// 后顧:
(?<=B)A   //查找B后面的A
// 負(fù)前瞻:
A(?!B)   //查找后面不是B的A
// 負(fù)后顧:
(?<!B)A   //查找前面不是B的A

回看formatSum表達(dá)式,將 (?:\d{3})+(?!\d) 視為一個整體表達(dá)式 A,即

formatSum = /\B(?=A)/g  //此處A為表示式并非真正字母A,只為方便理解

其意思是匹配表達(dá)式A前面的 \B ,而 \B 匹配的是非字母邊界,所以可以看出該表達(dá)式整體的作用是用來匹配并替換表達(dá)式 A 前邊的邊界的。

與 \B 對應(yīng)的還有 \b ,其匹配字母邊界。對于初學(xué)者來說,邊界的概念比較難以理解,你可以把它看作是無形的 | ,任何長度大于等于2的字符串中都存在邊界。如 ‘a(chǎn)b',它可以看作是'a|b', 只是此處 | 是無形的,當(dāng)然它也就不計入字符串長度。

'ab'.replace(/\B/, ',')
//  a,b

接下來為了看表達(dá)式 A 部分: (?:\d{3})+(?!\d) 。

首先 ?: 表示非捕獲分組,\d{3} 表示3位數(shù)字,則 (?:\d{3})+ 表示3、6、9、12…位數(shù)字;

(?!\d) 為負(fù)前瞻,表示匹配后面不是數(shù)字的 (?:\d{3})+ 。綜上:

(?:\d{3})+(?!\d)  

匹配'12345678'中后面不是數(shù)字的3*n(n=1遞增)位數(shù)字,即'678', '345678'

所以,得出結(jié)果:

formatSum = '12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')

匹配'12345678'中后面不是數(shù)字的3*n(n=1,n++)位數(shù)字前面的非字母邊界,
即'678', '345678'前面的非字母邊界,最終將這兩個邊界替換為逗號,
即 '3' 與 '6' 前加逗號

'12345678'.replace(/\B(?=(?:\d{3})+(?!\d))/g, ',')  === '12,345,678'
// true

總結(jié)

到此這篇關(guān)于js正則表達(dá)式之前瞻后顧與非捕獲分組的文章就介紹到這了,更多相關(guān)js正則前瞻后顧與非捕獲分組內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論

乌兰浩特市| 胶南市| 浏阳市| 吉林市| 西充县| 台北市| 额敏县| 临沧市| 永善县| 汤阴县| 罗定市| 桑日县| 健康| 韩城市| 浦县| 郁南县| 普兰店市| 尚义县| 大邑县| 黑水县| 双鸭山市| 东乌| 平乡县| 克东县| 井研县| 乌审旗| 文山县| 桦川县| 肇州县| 勐海县| 正镶白旗| 福海县| 黔江区| 财经| 黄石市| 柯坪县| 板桥市| 平江县| 碌曲县| 赤壁市| 克拉玛依市|