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

javascript正則表達(dá)式中分組詳解

 更新時(shí)間:2016年07月17日 19:01:06   作者:wubetter  
這篇文章主要介紹了javascript正則表達(dá)式中分組的相關(guān)資料,包括捕獲性分組和非捕獲性分組,需要的朋友可以參考下

之前寫了一篇關(guān)于正則新手入門的文章,本以為對(duì)正則表達(dá)式相對(duì)比較了解 但是今天我又遇到了一個(gè)坑,可能是自己不夠細(xì)心的原因吧,今天就著重和大家分享一下javascript正則表達(dá)式中的分組。如果你對(duì)JS正則表達(dá)式不夠理解 可以點(diǎn)擊這里了解更多。

分組在正則中用的還是比較廣的,我所理解的分組 就是一對(duì)括號(hào)() ,每一對(duì)括號(hào) 就代表了一個(gè)分組,

分組可以分為:

  1. 捕獲性分組
  2. 非捕獲性分組
  3. 捕獲性分組

捕獲性分組會(huì)在 比如 match exec這樣的函數(shù)中以第二項(xiàng),第三項(xiàng)的形式得到相應(yīng)分組的結(jié)果。先來(lái)看一個(gè)例子吧

 var reg = /test(\d+)/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "001", index: 4, input: "new test001 test002"]

代碼中 (\d+)是一個(gè)分組(有些人也叫他子模式),但是表示的都是同一個(gè)意思,上面的例子中 test001是完全匹配的結(jié)果,
然而 分組的匹配是從整個(gè)完全匹配結(jié)果(也就是test001)中來(lái)查找與子模式\d+匹配的字符,這里顯然是 001.

但是今天遇到的情況是這樣的

 var reg = /test(\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", "1", index: 4, input: "new test001 test002"]

不同之處就是 (\d+) 改為了 (\d)+ ,整個(gè)匹配結(jié)果還是 test001 但是第一個(gè)分組匹配的結(jié)果卻不同。

咱們慢慢來(lái)分析他們的區(qū)別

(\d+) 這整個(gè)是一個(gè)分組的情況,由于 默認(rèn)情況下 匹配模式都是貪婪模式 也就是說(shuō)盡可能多的去匹配
所有\(zhòng)d+ 匹配到的結(jié)果 是 001 然后 外面添加了一對(duì)括號(hào) 也就是一個(gè)分組,這樣第一個(gè)分組中匹配的結(jié)果就是 001.

再來(lái)看第二個(gè)例子中的 (\d)+ 同樣這也是一個(gè)貪婪模式 首先會(huì)先匹配0然后后面是0 也會(huì)匹配到 最后是1 同樣也匹配到 到此 匹配結(jié)束

看起來(lái)跟第一個(gè)例子中的匹配沒(méi)什么區(qū)別,但是這里的 分組(\d)表示 匹配單個(gè)數(shù)字,

按照我之前的理解是 會(huì)匹配最開始匹配到的結(jié)果 也就是0 但這種理解是錯(cuò)誤的。由于整個(gè)匹配是貪婪模式,盡可能多的去匹配

分組中的 (\d) 就會(huì)捕獲 最后一次匹配到的結(jié)果 1

如果是非貪婪模式 那就會(huì)盡可能少的去匹配

 var reg = /test(\d)+?/;
 var str = 'new test001 test002';
 console.log(str.match(reg));

//["test001", "0", index: 4, input: "new test001 test002"]

這樣(\d)匹配結(jié)果就是0了,雖然后面還有能夠匹配到的結(jié)果,但是這里是盡可能少的去匹配

非捕獲性分組

 var reg = /test(?:\d)+/;
 var str = 'new test001 test002';
 console.log(str.match(reg));
//["test001", index: 4, input: "new test001 test002"]

非捕獲性分組也就是 有些地方需要用到一對(duì)括號(hào),但是又不想讓他成為一個(gè)捕獲性分組也就是不想讓這個(gè)分組被類似 macth exec 這樣的函數(shù)所獲取到

通常在括號(hào)內(nèi)部的前面加上?: 也就是 (?:pattern)這樣就變成了一個(gè)非捕獲性分組,

這樣 match的結(jié)果中就不會(huì)出現(xiàn)分組匹配到的內(nèi)容了 也就是少了 第二項(xiàng)的 1.

這篇文章著重說(shuō)明 (\d+)和 (\d)+的區(qū)別,也是我今天踩到的坑,若有錯(cuò)誤之處,歡迎指正。

相關(guān)文章

  • bootstrap table表格使用方法詳解

    bootstrap table表格使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了bootstrap table表格使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 詳細(xì)分析JavaScript中的深淺拷貝

    詳細(xì)分析JavaScript中的深淺拷貝

    這篇文章主要介紹了JavaScript中的深淺拷貝,幫助大家更好的理解和學(xué)習(xí)JavaScript,感興趣的朋友可以了解下
    2020-09-09
  • js實(shí)現(xiàn)連續(xù)英文字符自動(dòng)換行兼容ie6 ie7和firefox

    js實(shí)現(xiàn)連續(xù)英文字符自動(dòng)換行兼容ie6 ie7和firefox

    英文字符自動(dòng)換行,通過(guò)js腳本截?cái)嘧址?此方法通用ie6,ie7,firefox,使用CSS控制強(qiáng)制換行實(shí)現(xiàn)不了的朋友可以嘗試下
    2013-09-09
  • JS數(shù)組及對(duì)象遍歷方法代碼匯總

    JS數(shù)組及對(duì)象遍歷方法代碼匯總

    這篇文章主要介紹了JS數(shù)組及對(duì)象遍歷方法代碼匯總,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 今天,小程序正式支持 SVG

    今天,小程序正式支持 SVG

    這篇文章主要介紹了小程序支持SVG,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • LayUI動(dòng)態(tài)設(shè)置checkbox不顯示的解決方法

    LayUI動(dòng)態(tài)設(shè)置checkbox不顯示的解決方法

    今天小編就為大家分享一篇LayUI動(dòng)態(tài)設(shè)置checkbox不顯示的解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-09-09
  • WebSocket的簡(jiǎn)單介紹及應(yīng)用

    WebSocket的簡(jiǎn)單介紹及應(yīng)用

    因此,如果讓服務(wù)器端也可以主動(dòng)發(fā)送信息到客戶端,就可以很大程度改進(jìn)這些不足。WebSocket就是一個(gè)實(shí)現(xiàn)這種雙向通信的新協(xié)議。下面小編來(lái)簡(jiǎn)單介紹下它
    2019-05-05
  • echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽

    echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽

    項(xiàng)目中有遇到需要使用餅圖展示每種狀態(tài)所占比例,去echarts官網(wǎng)學(xué)習(xí)了一番,下面這篇文章主要給大家介紹了關(guān)于echarts餅圖標(biāo)簽formatter使用及餅圖自定義標(biāo)簽的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • 淺談時(shí)鐘的生成(js手寫簡(jiǎn)潔代碼)

    淺談時(shí)鐘的生成(js手寫簡(jiǎn)潔代碼)

    下面小編就為大家?guī)?lái)一篇淺談時(shí)鐘的生成(js手寫簡(jiǎn)潔代碼)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-08-08
  • uniapp實(shí)現(xiàn)微信公眾號(hào)支付的方法步驟

    uniapp實(shí)現(xiàn)微信公眾號(hào)支付的方法步驟

    本文主要介紹了uniapp實(shí)現(xiàn)微信公眾號(hào)支付的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論

临武县| 肃南| 神池县| 麻阳| 彭阳县| 三台县| 安泽县| 灵丘县| 汉中市| 平江县| 布拖县| 武安市| 赫章县| 科技| 松溪县| 兰溪市| 阿克陶县| 河池市| 千阳县| 区。| 潜江市| 上栗县| 阜城县| 奉贤区| 长宁区| 巴林右旗| 信丰县| 安徽省| 大余县| 昂仁县| 峨眉山市| 宜兰县| 什邡市| 天门市| 三原县| 望江县| 梅州市| 读书| 全南县| 荔浦县| 和田县|