JS正規表示式的分組匹配

2022-02-10 10:26:44 字數 2688 閱讀 2828

什麼是分組

通俗來說,我理解的分組就是在正規表示式中用()包起來的內容代表了乙個分組,像這樣的:

var reg = /(\d)/reg.test('12');  //

true

這裡reg中的(/d)就表示乙個分組,匹配兩位數字

分組內容的的形式

乙個分組中可以像上面這樣有乙個具體的表示式,這樣可以優雅地表達乙個重複的字串

/hahaha/

/(ha)/

這兩個表示式是等效的,但有了分組之後可以更急簡潔。

體格分組中還可以有多個候選表示式,例如

var reg = /i come from (hunan|hubei|zhejiang)/;

reg.test('i come from hunan'); //

true

reg.test('i come from hubei'); //

true

也就是說在這個分組中,通過|隔開的幾個候選表示式是並列的關係,所以可以把這個|理解為或的意思

分組的分類

分組有四種型別

分組的應用

分組在正則中還算使用的比較廣泛的,我們常用的是捕獲型分組

var reg = /(\d)-(\d)-(\d)/;

var datestr = '2018-04-18';

reg.test(datestr);

//true

regexp.$1 //

2018

regexp.$2 //

04regexp.$3 //

18

結合replace方法做字串自定義替換string.prototype.replace方法的傳參中可以直接引用**獲的串,比如我們想開發中常見的日期格式替換,例如後台給你返回了乙個2018/04/18,讓你用正則替換為2018-04-18,就可以利用分組

var datestr = '2018/04/18';

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

datestr = datestr.replace(reg, '$1-$2-$3') //

"2018-04-18"

不過這裡需要注意的是/是需要用\轉義的

var reg = /(\w) is \1/reg.test('kid is kid') //

true

reg.test('dik is dik') //

true

reg.test('kid is dik') //

false

reg.test('dik is kid') //

false \1表示重複正則第乙個圓括號內匹配到的內容 \2表示重複正則第二個圓括號內匹配到的內容 js裡總共可以放9個對應用\1....\9來獲取重用

需要注意的是,如果引用了越界或者不存在的編號的話,就被被解析為普通的表示式

var reg = /(\w) is \6/;

reg.test( 'kid is kid' ); //

false

reg.test( 'kid is \6' ); //

true

非捕獲型分組

有的時候只是為了分組並不需要捕獲的情況下就可以使用非捕獲型分組,例如

var reg = /(?:\d)-(\d)-(\d)/

var date = '2012-12-21'reg.test(date)

regexp.$1 //

12regexp.$2 //

21

正向與反向前瞻型分組

正向前瞻型分組:你站在原地往前看,如果前方是指定的東西就返回true,否則為false

var reg = /kid is a (?=doubi)/

reg.test('kid is a doubi') //

true

reg.test('kid is a shabi') //

false

反向前瞻型分組:你站在原地往前看,如果前方不是指定的東西則返回true,如果是則返回false

var reg = /kid is a (?!doubi)/reg.test('kid is a doubi') //

false

reg.test('kid is a shabi') //

true

既然前瞻型分組和非捕獲型分組都不會捕獲,那他們有什麼區別呢?先看例子:

var reg, str = "kid is a doubi";

reg = /(kid is a (?:doubi))/reg.test(str)

regexp.$1 //

kid is a doubi

reg = /(kid is a (?=doubi))/reg.test(str)

regexp.$1 //

kis is a

也就是說非捕獲型分組匹配到的字串任然會被外層分組匹配到,而前瞻型不會,所以如果你希望在外層分組中不匹配裡面分組的值的話就可以使用前瞻型分組了。

正規表示式 匹配分組

功能 匹配左右任意乙個表示式 ab 將括號中字元作為乙個分組 num引用分組num匹配到的字串 p 分組起別名 p name 引用別名為name分組匹配到的字串 import re 水果列表 fruit list banana orange pear 遍歷資料 for value in fruit ...

JS正規表示式的分組

什麼是分組 通俗來說,我理解的分組就是在正規表示式中用 包起來的內容代表了乙個分組,像這樣的 var reg d reg.test 12 true這裡reg中的 d 就表示乙個分組,匹配兩位數字 分組內容的的形式 乙個分組中可以像上面這樣有乙個具體的表示式,這樣可以優雅地表達乙個重複的字串 haha...

JavaScript 正規表示式的分組匹配

下面的正規表示式可以匹配kidkidkid kidkidkid 而另一種更優雅的寫法是 kid 這裡由圓括號包裹的乙個小整體稱為分組。乙個分組中,可以有多個候選表示式,用 分隔 var reg i love him her it reg.test i love him true reg.test i...