在 JavaScript 中,exec() 和 match() 區別

落花看风雪發表於2024-04-06

在 JavaScript 中,exec()match() 都是與正規表示式相關的常用方法,但它們的使用方式和返回的結果有所不同。

exec() 方法

exec()RegExp 物件的一個方法,用於在字串中執行一次正規表示式匹配。它的語法是:

regexp.exec(string)

其中 regexp 是一個正規表示式物件,string 是要在其中執行匹配的字串。

exec() 方法返回一個陣列,包含匹配的結果。如果沒有匹配項,則返回 null。返回的陣列包含特定的屬性:

  • index:匹配項在字串中的位置。
  • input:被查詢的原始字串。
  • groups:命名捕獲組的物件(如果正規表示式中有命名捕獲組的話)。

如果正規表示式包含全域性標誌 gexec() 方法的行為會有所不同。在帶有 g 標誌的情況下,每次呼叫 exec() 都會返回字串中的下一個匹配項,直到沒有更多的匹配項為止。每次呼叫後,正規表示式物件的 lastIndex 屬性都會更新,以反映下一次匹配開始的位置。

match() 方法

match() 是字串物件的一個方法,用於在字串中檢索與正規表示式匹配的項。它的語法是:

str.match(regexp)

其中 str 是字串物件,regexp 可以是正規表示式物件或者正規表示式字面量。

match() 方法返回一個陣列,包含字串中所有與正規表示式匹配的項。如果沒有匹配項,則返回 null。如果正規表示式沒有全域性標誌 gmatch() 的行為類似於 regexp.exec(str),但返回的是整個匹配結果的陣列,而不是包含匹配資訊的陣列陣列。如果正規表示式包含 g 標誌,match() 會返回所有匹配項的陣列。

區別

  • 呼叫者不同:exec()RegExp 物件的方法,而 match() 是字串物件的方法。
  • 返回值:在不使用全域性標誌 g 的情況下,兩者都返回包含匹配結果的陣列。但在使用 g 時,exec() 在每次呼叫時返回下一個匹配項,而 match() 返回所有匹配項的陣列。
  • 用途:exec() 更適用於在迴圈中逐個檢索匹配項,特別是當需要訪問正規表示式的 lastIndex 屬性時。而 match() 則更直接地返回所有匹配項,適合一次性獲取所有匹配結果。

示例

let str = "The rain in SPAIN stays mainly in the plain";  
let regex = /ain/g;  
  
// 使用 exec()  
let execResult;  
while ((execResult = regex.exec(str)) !== null) {  
  console.log(execResult[0]); // 依次輸出 "ain", "ain", "ain"  
}  
  
// 使用 match()  
let matchResult = str.match(regex);  
console.log(matchResult); // 輸出 ["ain", "ain", "ain"]

在這個例子中,exec() 在迴圈中被用來逐個檢索匹配項,而 match() 則直接返回所有匹配項的陣列。

相關文章