JS46 JS中的match和exec方法

2021-08-28 01:14:25 字數 2685 閱讀 5878

我發現,如果只是總結,不回顧,不親自動手嘗試一下,印象是很不深刻的。(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...