在 JavaScript 中,exec()
和 match()
都是與正規表示式相關的常用方法,但它們的使用方式和返回的結果有所不同。
exec()
方法
exec()
是 RegExp
物件的一個方法,用於在字串中執行一次正規表示式匹配。它的語法是:
regexp.exec(string)
其中 regexp
是一個正規表示式物件,string
是要在其中執行匹配的字串。
exec()
方法返回一個陣列,包含匹配的結果。如果沒有匹配項,則返回 null
。返回的陣列包含特定的屬性:
index
:匹配項在字串中的位置。input
:被查詢的原始字串。groups
:命名捕獲組的物件(如果正規表示式中有命名捕獲組的話)。
如果正規表示式包含全域性標誌 g
,exec()
方法的行為會有所不同。在帶有 g
標誌的情況下,每次呼叫 exec()
都會返回字串中的下一個匹配項,直到沒有更多的匹配項為止。每次呼叫後,正規表示式物件的 lastIndex
屬性都會更新,以反映下一次匹配開始的位置。
match()
方法
match()
是字串物件的一個方法,用於在字串中檢索與正規表示式匹配的項。它的語法是:
str.match(regexp)
其中 str
是字串物件,regexp
可以是正規表示式物件或者正規表示式字面量。
match()
方法返回一個陣列,包含字串中所有與正規表示式匹配的項。如果沒有匹配項,則返回 null
。如果正規表示式沒有全域性標誌 g
,match()
的行為類似於 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()
則直接返回所有匹配項的陣列。