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

2021-10-17 06:04:55 字數 1329 閱讀 4122

首先正則是很複雜,很巧妙的。

你舉的這個例子說明貪婪模式和非貪婪模式是不對的。

啥是貪婪模式,和非貪婪模式?

貪婪模式,就是「貪得無厭」,有了還要,有多少要多少,指導沒有(字串尾)。

非貪婪模式,恰好相反,匹配了就不要了,就得到結果。

我先舉乙個例子來說明,貪婪模式和非貪婪模式,只在你的基礎上稍稍改動,為了後面對比說明。

var str='aabab';

var reg=/a.*b/g;

var res=str.match(reg);

console.log(res);

注意,比你那個多了乙個".",表示任意字元。

上面這個是貪婪模式,a和b之間可以有任意字元,他一直「貪婪」找到了最後乙個b,得到的結果是: aabab

現在來看,非貪婪模式:

var str='aabab';

var reg=/a.*?b/g;

var res=str.match(reg);

console.log(res);

得到的結果是["aab","ab"],找到一組匹配就找第二組(這裡使用了g的)。

再回過頭來看你的

首先分析你正規表示式,表示匹配內容為:任意個a,末尾是b(注意中間不能是其他字元,只能是a)。

得到的結果是:["aab","ab"]。

你的意思是,應該得到aabab,但是實際情況是,你的正則要的有任意a(不能有b),試問它怎麼繼續匹配得到aabab呢。

所以說,用你舉的例子來說明貪婪模式和非貪婪模式是不對的。

你沒有先從正規表示式本身去分析,而是一心撲在了對貪婪模式和非貪婪模式的理解上去了。

理解了上面的,再來看這個,我想就應該明白了:

貪婪模式:

var str="baaaa";

var reg=/ba*/g;

var res=str.match(reg);

console.log(res);//["baaaa"]

var str="baaaa";

var reg=/ba+/g;

var res=str.match(reg);

console.log(res);//["baaaa"]

非貪婪模式:

var str="baaaa";

var reg=/ba*?/g;

var res=str.match(reg);

console.log(res);//["b"]

var str="baaaa";

var reg=/ba+?/g;

var res=str.match(reg);

console.log(res);//["ba"]

JS正則(貪婪模式)

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

關於js正則

string支援4種使用正規表示式的方法 string.search regexp 返回第乙個與之匹配的字串的起始位置,如果找不到匹配的字串將返回 1,它會忽略正規表示式引數中的修飾符g string.replace regexp,strto 執行檢索與替換操作,如果正規表示式引數中設定了修飾符g,...

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

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