exec和match中的g標識

2021-08-08 21:27:33 字數 2204 閱讀 2085

exec() 函式是regexp物件的乙個方法;match()是string物件的乙個方法。

正規表示式中,如果沒有g,exec和match方法都是返回字串中第乙個匹配的部分,如果有分組的話,分組也會返回;

如果有g,exec每執行一次都會將reg的lastindex屬性更新,下次載執行exec時,會從這個值開始搜尋匹配的部分,如果有分組的話,分組也返回;

如果有g,match會將字串中所有與正規表示式匹配的部分返回,忽視分組。

假設有乙個字串:

str

='dwd [email protected] [email protected]'

;

匹配郵件的正規表示式:

let 

re =

/([\w\.]+)\@(\w+)\.(\w+)/

; // 匹配郵件的正規表示式,並進行了分組,@之前是一組,@到.之間分一組,.之後分一組

沒有g: 

// 

第一次執行

re.exec(str)

console.log(re.exec(str));

console.log(re.lastindex);

// 0

// 第二次執行

re.exec(str)

console.log(re.exec(str));

console.log(re.lastindex);

// 0

console.log(str.match(re));

console.log(str.match(re));

/*exec()h

和match()

返回值一樣,不論執行了多少次:

[ '[email protected]',

'bill.gates',

'microsoft',

'com',

index: 4,

input: 'dwd [email protected] [email protected]' ]

re.lastindex

的值兩次都為

0,可以認為在沒有

g時,沒有繼續向後序內容匹配的需求,所以

lastindex

沒有必要更改。

*/

有g:

// 

第一次執行

re.exec(str)

console.log(re.exec(str));

console.log(re.lastindex);

// 28

// 第二次執行

re.exec(str)

console.log(re.exec(str));

console.log(re.lastindex);

// 46

console.log(str.match(re));

console.log(str.match(re));

/*對於

exec

來說,有

g意味著

「我有繼續向後序內容匹配的需求

」,沒呼叫一次

exec

就匹配一次,只是每次匹配的起點不同(由

lastindex

決定);

對於match

來說,有

g意味著

「我需要得到所有與整條正規表示式(不管分組)匹配的部分」,

[ '[email protected]',

'bill.gates',

'microsoft',

'com',

index: 4,

input: 'dwd [email protected] [email protected]' ]

28[ '[email protected]',

'someone',

'gmail',

'com',

index: 29,

input: 'dwd [email protected] [email protected]' ]

46[ '[email protected]', '[email protected]' ]

[ '[email protected]', '[email protected]' ]

*/

JS46 JS中的match和exec方法

我發現,如果只是總結,不回顧,不親自動手嘗試一下,印象是很不深刻的。2018 12 06 exec是regexp物件的方法,引數才是字串,match是字串執行匹配正規表示式規則的方法,引數是正則表達,返回的都是陣列 在正規表示式沒有全域性標誌g時,二者的返回值是相同的 const text cat,...

js正則表達exec和match的區別

以前用js很少用到js的正規表示式,即使用到了,也是諸如郵件名稱之類的判斷,網上 很多,很少有研究,拿來即用。最近開發遇到一些需要使用正規表示式,順便研究一下 正規表示式物件有兩個定義方式 1 第一種定義 new regexp pattern,attributes 如var reg new rege...

js正則表達exec和match的區別

js正則表達exec和match的區別 正規表示式物件有兩個定義方式 1 第一種定義 new regexp pattern attributes 如var reg new regexp abc g 其中pattern為表示表示式內容,如上表示匹配abc attributes g,全域性匹配,i不區分...