exec() 函式是regexp物件的乙個方法;match()是string物件的乙個方法。
正規表示式中,如果沒有g,exec和match方法都是返回字串中第乙個匹配的部分,如果有分組的話,分組也會返回;
如果有g,exec每執行一次都會將reg的lastindex屬性更新,下次載執行exec時,會從這個值開始搜尋匹配的部分,如果有分組的話,分組也返回;
如果有g,match會將字串中所有與正規表示式匹配的部分返回,忽視分組。
假設有乙個字串:
str='dwd [email protected] [email protected]'
;
匹配郵件的正規表示式:
letre =
/([\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不區分...