js正則貪婪模式 深入理解JS正規表示式 分組

2021-10-20 21:16:38 字數 1620 閱讀 8048

深入理解js正規表示式---分組

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

•捕獲性分組

•非捕獲性分組

捕獲性分組

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

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 但是第乙個分組匹配的結果卻不同。咱們慢慢來分析他們的區別

(\d+) 這整個是乙個分組的情況,由於 預設情況下 匹配模式都是貪婪模式 也就是說盡可能多的去匹配所有\d+ 匹配到的結果 是 001 然後 外面新增了一對括號 也就是乙個分組,這樣第乙個分組中匹配的結果就是 001.再來看第二個例子中的 (\d)+ 同樣這也是乙個貪婪模式 首先會先匹配0然後後面是0 也會匹配到 最後是1 同樣也匹配到 到此 匹配結束看起來跟第乙個例子中的匹配沒什麼區別,但是這裡的 分組(\d)表示 匹配單個數字,按照我之前的理解是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 這樣的函式所獲取到通常在括號內部的前面加上?: 也就是 (?:pattern)這樣就變成了乙個非捕獲性分組,

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

var str = 'new test001 test002';

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

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

js正則貪婪模式 深入理解JS正規表示式 分組

深入理解js正規表示式 分組 分組在正則中用的還是比較廣的,我所理解的分組 就是一對括號 每一對括號 就代表了乙個分組,分組可以分為 捕獲性分組 非捕獲性分組 捕獲性分組 捕獲性分組會在 比如 match exec這樣的函式中以第二項,第三項的形式得到相應分組的結果。先來看乙個例子吧 var reg...

JS正則(貪婪模式)

js學習筆記 用到的幾個鏈結 可以當api用,說的很詳細。講解貪婪惰性 正規表示式量詞分別是 貪婪的 惰性的 支配性的。貪婪 惰性 支配 分別的意思是 零次或一次出現 零次或多次出現 一次或多次出現 恰好n次出現 至少n次最多m次出現 至少n次出現。貪婪量詞 先看整個字串是否匹配,如果不匹配就把最後...

js正則貪婪模式 JS關於正則的非貪婪模式

首先正則是很複雜,很巧妙的。你舉的這個例子說明貪婪模式和非貪婪模式是不對的。啥是貪婪模式,和非貪婪模式?貪婪模式,就是 貪得無厭 有了還要,有多少要多少,指導沒有 字串尾 非貪婪模式,恰好相反,匹配了就不要了,就得到結果。我先舉乙個例子來說明,貪婪模式和非貪婪模式,只在你的基礎上稍稍改動,為了後面對...