深入理解JS正則表達式-分組
來源:易賢網 閱讀:864 次 日期:2016-07-26 16:07:19
溫馨提示:易賢網小編為您整理了“深入理解JS正則表達式-分組”,方便廣大網友查閱!

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

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

•捕獲性分組

•非捕獲性分組

捕獲性分組

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

var reg = /test(\d+)/;

 var str = 'new test001 test002';

 console.log(str.match(reg));//["test001", "001", index: 4, input: "new test001 test002"]

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

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

var reg = /test(\d)+?/;

var str = 'new test001 test002';

console.log(str.match(reg));//["test001", "0", index: 4, input: "new test001 test002"]

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

非捕獲性分組

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

var reg = /test(?:\d)+/;

 var str = 'new test001 test002';

 console.log(str.match(reg));//["test001", index: 4, input: "new test001 test002"]

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

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

以上這篇深入理解JS正則表達式---分組就是小編分享給大家的全部內容了,希望能給大家一個參考

更多信息請查看網絡編程
易賢網手機網站地址:深入理解JS正則表達式-分組

2025國考·省考課程試聽報名

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯(lián)系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網