match()與exec()區別
關於兩個方法的基本用法可以參閱一下兩篇文章:
(1).正規表示式 exec()方法一章節。
(2).正規表示式match()方法一章節。
只要閱讀上述兩篇文章,並掌握各自用法,自然就很清楚它們之間的區別。
為了便於學習,本文再將兩個方法的區別進行一下總結。
一.所屬物件的不同:
這個區別最為簡單明顯。
match方法屬於字串物件,exec方法屬於正規表示式物件。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="antzone"; let reg=/n/; console.log(reg.exec(str));
exec方法的呼叫物件是正規表示式物件,方法的引數是字串。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="本站url地址是www.softwhy.com"; let reg=/why/; console.log(str.match(reg));
match方法由字串物件呼叫,方法的引數是正規表示式。
二.方法返回結果的不同:
(1).非全域性匹配:
當採用非全域性匹配的時候,兩個方法的返回值完全一樣。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="antzoane"; let reg=/a(n)/; console.log(str.match(reg)); console.log(reg.exec(str));
程式碼執行效果截圖如下:
很明顯,兩個方法的返回值是一模一樣的。
(2).全域性匹配:
當為全域性匹配的時候,返回結果出現很大不同。
match方法返回一個存放所有匹配內容的陣列(無視子表示式的匹配)。
exex方法返回陣列不會儲存所有的匹配,僅儲存第一個匹配到的內容(儲存在數字第一個元素),第二個元素儲存第一個子表示式匹配到的內容,第三個元素儲存第二個子表示式匹配到的內容,以此類推。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="antzoane"; let reg=/a(n)/g; console.log(str.match(reg)); console.log(reg.exec(str));
程式碼執行效果截圖如下:
執行效果截圖印證了前面的理論闡述。全域性匹配下,exec方法還可以與lastIndex屬性配合使用。
lastIndex屬性可以返回或者設定正規表示式將要開始的匹配的起始位置。
對match方法而言,lastIndex屬性值始終為0。
[JavaScript] 純文字檢視 複製程式碼執行程式碼let str="ant8zone"; let reg=/\d/g; console.log(reg.exec(str)); console.log(reg.lastIndex);
程式碼執行效果截圖如下:
初始狀態lastIndex屬性值為0,正規表示式匹配到數字8,在字串中的位置為3。
那麼下一次就是從字元"z"處開始匹配,"z"的位置是4。
對於match方法而言,lastIndex值始終為0,基本沒啥實質應用意義。
相關文章
- 在 JavaScript 中,exec() 和 match() 區別JavaScript
- 字串的match方法與正則的exec方法的區別字串
- 正規表示式中test、exec、match的區別介紹及括號的用法
- Python中eval與exec的使用及區別Python
- 探究js正則匹配方法:match和execJS
- ElasticSearch 中 match、match_phrase、query_string 和 term 的區別Elasticsearch
- python內建函式-eval()函式與exec()函式的區別Python函式
- 在Python中,val、exec和 compile 有什麼區別?PythonCompile
- Linux中fork和exec是什麼?有何區別?Linux
- eval()、exec()與execfile()
- HTTP Etag與If-None-MatchHTTPNone
- ??與?:的區別
- 深度辨析 Python 的 eval() 與 exec()Python
- mouseenter與mouseover區別
- currentTarget與target區別
- mouseout與mouseleave區別
- classList與className區別
- innerText與textContent區別
- GET與POST區別
- let與const區別
- NIO與IO區別
- 區別mouseover與mouseenter?
- ApplicationContext 與 BeanFactory 區別APPContextBean
- setInterval()與setTimeout()區別
- localStorage與sessionStorage 區別Session
- showModal()與show() 區別
- <section>與<article> 區別
- onmouseover與onmouseenter區別
- offset與style區別
- cellpadding與cellspacing 區別padding
- animation與transition 區別
- encodeURI與encodeURIComponent區別
- JavaScript與ECMAScript 區別JavaScript
- FragmentPagerAdapter與FragmentStatePagerAdapter區別FragmentAPT
- put與putIfAbsent區別
- JavaScript 與TypeScript區別JavaScriptTypeScript
- Go Exec 殭屍與孤兒程式Go
- __weak與__block區別,深層理解兩者區別BloC