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

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

 更新時間:2016年07月18日 09:10:59   投稿:jingxian  
下面小編就為大家?guī)硪黄钊肜斫釰S正則表達(dá)式---分組。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

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

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

捕獲性分組

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

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

代碼中 (\d+)是一個分組(有些人也叫他子模式),但是表示的都是同一個意思,上面的例子中 test001是完全匹配的結(jié)果,然而 分組的匹配是從整個完全匹配結(jié)果(也就是test001)中來查找與子模式\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)+ ,整個匹配結(jié)果還是 test001 但是第一個分組匹配的結(jié)果卻不同。咱們慢慢來分析他們的區(qū)別

(\d+) 這整個是一個分組的情況,由于 默認(rèn)情況下 匹配模式都是貪婪模式 也就是說盡可能多的去匹配所有\(zhòng)d+ 匹配到的結(jié)果 是 001 然后 外面添加了一對括號 也就是一個分組,這樣第一個分組中匹配的結(jié)果就是 001.再來看第二個例子中的 (\d)+ 同樣這也是一個貪婪模式 首先會先匹配0然后后面是0 也會匹配到 最后是1 同樣也匹配到 到此 匹配結(jié)束看起來跟第一個例子中的匹配沒什么區(qū)別,但是這里的 分組(\d)表示 匹配單個數(shù)字,按照我之前的理解是0 但這種理解是錯誤的。由于整個匹配是貪婪模式,盡可能多的去匹配分組中的 (\d) 就會捕獲 最后一次匹配到的結(jié)果 1,如果是非貪婪模式 那就會盡可能少的去匹配

 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é)果,但是這里是盡可能少的去匹配

非捕獲性分組

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

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

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

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

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

相關(guān)文章

  • JavaScript入門之對象與JSON詳解

    JavaScript入門之對象與JSON詳解

    JSON是JavaScript中對象的字面量,是對象的表示方法,通過使用JSON,可以減少中間變量,使代碼的結(jié)構(gòu)更加清晰,也更加直觀。使用JSON,可以動態(tài)的構(gòu)建對象,而不必通過類來進(jìn)行實例化,大大的提高了編碼的效率
    2011-10-10
  • JS 實現(xiàn)計算器詳解及實例代碼(一)

    JS 實現(xiàn)計算器詳解及實例代碼(一)

    這篇文章主要介紹了JS 實現(xiàn)計算器詳解及實例代碼的相關(guān)資料,這里對實現(xiàn)計算器的思路及實現(xiàn)步驟進(jìn)行了一一詳解,需要的朋友可以參考下
    2017-01-01
  • JavaScript中幾種排序算法的簡單實現(xiàn)

    JavaScript中幾種排序算法的簡單實現(xiàn)

    這篇文章主要介紹了JavaScript中幾種排序算法的簡單實現(xiàn),排序是各種編程語言學(xué)習(xí)中都是共通的必會的基礎(chǔ),需要的朋友可以參考下
    2015-07-07
  • JavaScript中var關(guān)鍵字的使用詳解

    JavaScript中var關(guān)鍵字的使用詳解

    這篇文章主要介紹了JavaScript中var關(guān)鍵字的使用,是JavaScript入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-08-08
  • 談?wù)凧avaScript中的幾種借用方法

    談?wù)凧avaScript中的幾種借用方法

    我們下面來看一篇關(guān)于JavaScript中借用方法的一個詳細(xì)介紹,注意:本文假設(shè)你已經(jīng)掌握使用 call()、apply()和bind()的相關(guān)知識和它們之間的區(qū)別,希望這篇文章能夠讓各位了解到JavaScript中的借用方法吧。
    2016-08-08
  • Python腳本后臺運(yùn)行的幾種方式

    Python腳本后臺運(yùn)行的幾種方式

    這篇文章主要介紹了Python腳本后臺運(yùn)行的幾種方式,linux下后臺運(yùn)行、通過upstart方式實現(xiàn)、通過bash腳本實現(xiàn)、通過screen、tmux等方式實現(xiàn),需要的朋友可以參考下
    2015-03-03
  • 再探JavaScript作用域

    再探JavaScript作用域

    這篇文章主要介紹了再探JavaScript作用域,本文用簡潔的語言和直觀的測試結(jié)果圖片給大家講解JavaScript的作用域,需要的朋友可以參考下
    2014-09-09
  • 取得父標(biāo)簽

    取得父標(biāo)簽

    取得父標(biāo)簽...
    2006-11-11
  • JavaScript中的Math.atan2()方法使用詳解

    JavaScript中的Math.atan2()方法使用詳解

    這篇文章主要介紹了JavaScript中的Math.atan2()方法使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-06-06
  • javascript的BOM

    javascript的BOM

    BOM是瀏覽器的窗口對象,提供了很多窗口處理的API。在webapp框架越來越多的情況下,需要我們在同一窗口處理不同頁面、不同的ajax數(shù)據(jù),則需要我們熟悉BOM的內(nèi)容。
    2016-05-05

最新評論

康马县| 舟曲县| 庆阳市| 伊川县| 天峨县| 连平县| 达尔| 柯坪县| 芦山县| 建昌县| 宁南县| 永安市| 溆浦县| 高要市| 冀州市| 略阳县| 凌源市| 闵行区| 长垣县| 浑源县| 中超| 永丰县| 舒城县| 保德县| 五家渠市| 婺源县| 黄浦区| 涞源县| 连山| 平顺县| 新兴县| 祁阳县| 龙江县| 青海省| 海宁市| 深泽县| 富源县| 黑龙江省| 威宁| 桂东县| 蕉岭县|