亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

深入理解JS正則表達(dá)式---分組

 更新時(shí)間:2016年07月18日 09:10:59   投稿:jingxian  
下面小編就為大家?guī)?lái)一篇深入理解JS正則表達(dá)式---分組。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

深入理解JS正則表達(dá)式---分組

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

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

•捕獲性分組
•非捕獲性分組

捕獲性分組

捕獲性分組會(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ù)字,按照我之前的理解是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é)果,但是這里是盡可能少的去匹配

非捕獲性分組

非捕獲性分組也就是 有些地方需要用到一對(duì)括號(hào),但是又不想讓他成為一個(gè)捕獲性分組也就是不想讓這個(gè)分組被類(lèi)似 macth exec 這樣的函數(shù)所獲取到通常在括號(hào)內(nèi)部的前面加上?: 也就是 (?:pattern)這樣就變成了一個(gè)非捕獲性分組,

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

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

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

以上這篇深入理解JS正則表達(dá)式---分組就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • javascript設(shè)計(jì)模式之代理模式

    javascript設(shè)計(jì)模式之代理模式

    這篇文章主要為大家介紹了javascript代理模式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • javascript打開(kāi)word文檔的方法

    javascript打開(kāi)word文檔的方法

    這篇文章主要介紹了javascript打開(kāi)word文檔的方法,需要的朋友可以參考下
    2014-04-04
  • JavaScript中的fontsize()方法使用詳解

    JavaScript中的fontsize()方法使用詳解

    這篇文章主要介紹了JavaScript中的fontsize()方法使用詳解,是JS入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • 詳解JavaScript編程中正則表達(dá)式的使用

    詳解JavaScript編程中正則表達(dá)式的使用

    這篇文章主要介紹了詳解JavaScript編程中正則表達(dá)式的使用,并列出了JS所支持的正則第oxo昂,需要的朋友可以參考下
    2015-10-10
  • 在HTML中插入JavaScript代碼的示例

    在HTML中插入JavaScript代碼的示例

    這篇文章主要介紹了在HTML中插入JavaScript代碼的示例,嵌套在HTML代碼中是JavaScript的基本功能,需要的朋友可以參考下
    2015-06-06
  • javascript內(nèi)存管理詳細(xì)解析

    javascript內(nèi)存管理詳細(xì)解析

    本文是對(duì)javascript中的內(nèi)存管理進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-11-11
  • 關(guān)于JavaScript 原型鏈的一點(diǎn)個(gè)人理解

    關(guān)于JavaScript 原型鏈的一點(diǎn)個(gè)人理解

    本文給大家分享的是個(gè)人關(guān)于JavaScript原型鏈相關(guān)知識(shí)的一些理解,這里推薦給大家,希望大家能夠喜歡
    2016-07-07
  • JavaScript中splice的使用方法詳解

    JavaScript中splice的使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了JavaScript中splice的使用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-03-03
  • 詳解JSON.parse和JSON.stringify用法

    詳解JSON.parse和JSON.stringify用法

    本文詳細(xì)講解了JSON.parse和JSON.stringify的用法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 淺析js中mvvm模式實(shí)現(xiàn)的原理

    淺析js中mvvm模式實(shí)現(xiàn)的原理

    在本篇文章中我們給大家分享了關(guān)于js中mvvm模式實(shí)現(xiàn)的原理的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們參考下。
    2018-10-10

最新評(píng)論