我發現,如果只是總結,不回顧,不親自動手嘗試一下,印象是很不深刻的。(2018-12-06)
exec
是regexp物件的方法,引數才是字串,match
是字串執行匹配正規表示式規則的方法,引數是正則表達,返回的都是陣列;
在正規表示式沒有全域性標誌g
時,二者的返回值是相同的
const text = 'cat, bat';
let pattern = /.at/
pattern.exec(text)
// ["cat"]
pattern.exec(text)
// ["cat"]
text.match(pattern)
// ["cat"]
text.match(pattern)
// ["cat"]
let pattern2 = /.(at)/
pattern2.exec(text)
// ["cat", "at"]
pattern2.exec(text)
// ["cat", "at"]
在正規表示式含有全域性標誌g
時,二者的返回值不同
let pattern3 = /.at/g
text.match(pattern3)
// ["cat", "bat"]
text.match(pattern3)
// ["cat", "bat"]
pattern3.exec(text)
// ["cat"]
pattern3.exec(text)
// ["bat"]
let pattern4 = /.(at)/g
text.match(pattern4)
// ["cat", "bat"]
text.match(pattern4)
// ["cat", "bat"]
pattern4.exec(text)
// ["cat", "at"]
pattern4.exec(text)
// ["bat", "at"]
總結一下:(g
代表全域性標誌,捕代表捕獲組,每種情況的用→
連線的多個陣列代表執行多次的結果)
(1)對於match
方法,是字串的方法,返回值是陣列
有g
的時候,會返回所有匹配項,沒有g
的時候只會返回第乙個匹配項
有捕獲組的情況下,只有在沒有g
的情況下,才會返回第乙個匹配項的捕獲組
(2)對於exec
方法,是regexp物件的方法,返回值是陣列
有g
的時候,exec
每次執行會呈現出遞進的特性,否則每次執行的結果都是相同的
有捕獲組的時候,總會返回當前匹配項的捕獲組
const date = '2018-10-07t11:48:47 asia/zh-cn@@@@@@@@@2017-11-11t22:22:22 asia/zh-cn';
要求匹配:
// ['2018', '10', '07', '11', '48', '47']
(1)想要獲得第乙個匹配項的全部的捕獲組:
// 使用match方法,正規表示式不能由g
const reg = /(\d)-(\d+)-(\d+)t(\d+):(\d+):(\d)/;
const result = date.match(reg).slice(1)
// 或者使用exec方法
// 正則有g沒g都可以
const reg = /(\d)-(\d+)-(\d+)t(\d+):(\d+):(\d)/;
const result = reg.exec(date).slice(1)
(2)獲得所有的匹配項:
// 使用match方法
const reg = /(\d)-(\d+)-(\d+)t(\d+):(\d+):(\d)/g;
const result = date.match(reg)
使用exec
方法需要迴圈呼叫,其實就沒有必要了:
// 使用exec方法
const reg = /(\d)-(\d+)-(\d+)t(\d+):(\d+):(\d)/g;
let result = ;
let temp = reg.exec(date);
while(temp)
(3)獲得全部匹配項的全部捕獲組
這種情況只能通過迴圈呼叫exec
方法,設定g
和捕獲組實現
const reg = /(\d)-(\d+)-(\d+)t(\d+):(\d+):(\d)/g;
let result = ;
let temp = reg.exec(date);
while(temp)
js正則表達test exec和match的區別
test的用法和exec一致,只不過返回值是 true false。以前用js很少用到js的正規表示式,即使用到了,也是諸如郵件名稱之類的判斷,網上 很多,很少有研究,拿來即用。最近開發遇到一些需要使用正規表示式,順便研究一下 正規表示式物件有兩個定義方式 1 第一種定義 new regexp pa...
js正則表達test exec和match的區別
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!test的用法和exec一致,只不過返回值是 true false。以前用js很少用到js的正規表示式,即使用到了,也是諸如郵件名稱之類的判斷,網上 很多,很少有研究,拿來即用。最近開發遇到一些需要使用正規表示式,順便研究一下 正規表示式物件有兩個...
js正則表達exec和match的區別
以前用js很少用到js的正規表示式,即使用到了,也是諸如郵件名稱之類的判斷,網上 很多,很少有研究,拿來即用。最近開發遇到一些需要使用正規表示式,順便研究一下 正規表示式物件有兩個定義方式 1 第一種定義 new regexp pattern,attributes 如var reg new rege...