JavaScript RegExp exec() 方法

定義和用法

exec() 方法測試字符串中的匹配項。

該方法是通用的匹配模式。

如果找到匹配項,則返回結果數組,否則返回 null

實例

例子 1

在字符串中搜索字符 "e":

let text = "The best things in life are free";
let result = /e/.exec(text);

親自試一試

例子 2

在字符串中全局搜索 "Hello" 和 "W3School" :

let text = "Hello world!";
// 查找 "Hello"
let result1 = /Hello/.exec(text);
// 查找 "W3School"
let result2 = /W3School/.exec(text);

親自試一試

語法

regexp.exec(string)

參數

參數 描述
string 必需。要搜索的字符串。

返回值

類型 描述
數組 如果找到匹配,則包含匹配文本的數組,否則返回 null。

技術細節

返回值

數組,存放的是匹配的結果。如果沒有找到匹配,值為 null。下面介紹了返回的數組的格式。

拋出

類型 描述
TypeError 調用該方法的對象不是 RegExp 時,拋出該異常。

說明

在所有的 RegExp 模式匹配方法 String 模式匹配方法中,exec() 的功能最強大。它是一個通用的方法,使用起來比 RegExp.test()String.replace()String.match() 都復雜。

exec() 將檢索字符串 string,從中得到與正則表達式 regexp 相匹配的文本。如果 exec() 找到了匹配的文本,它就會返回一個結果數組。否則,返回 null。這個返回數組的第 0 個元素就是與表達式相匹配的文本。第 1 個元素是與 regexp 的第一個子表達式相匹配的文本(如果存在)。第 2 個元素是與 regexp 的第二個子表達式相匹配的文本,以此類推。通常,數組的 length 屬性聲明的是數組中的元素個數。除了數組元素和 length 屬性之外,exec() 還返回兩個屬性。index 屬性聲明的是匹配文本的第一個字符的位置。input 屬性指的就是 string。在調用非全局 RegExp 對象的 exec() 方法時,返回的數組與調用方法 String.match() 返回的方法相同。

在調用非全局模式的 exec() 方法時,它將進行檢索,并返回上述結果。不過,當 regexp 是一個全局正則表達式時,exec() 的行為就稍微復雜一些。它在 regexp 的屬性 lastIndex 指定的字符處開始檢索字符串 string 。當它找到了與表達式相匹配的文本時,在匹配之后,它將把 regexp 的 lastIndex 屬性設置為匹配文本的第一個字符的位置。這就是說,可以通過反復地調用 exec() 方法來遍歷字符串中的所有匹配文本。當 exec() 再也找不到匹配的文本時,它將返回 null,并且把屬性 lastIndex 重置為 0 。如果在另一個字符串中完成了一次模式匹配之后要開始檢索新的字符串,就必須手動地把 lastIndex 屬性重置為 0 。

注意,無論 regexp 是否是全局模式,exec() 都會將完整的細節添加到它返回的數組中。這就是 exec()String.match() 的不同之處,后者在全局模式下返回的信息要少得多。事實上,在循環中反復地調用 exec() 方法是唯一一種獲得全局模式的完整模式匹配信息的方法。

瀏覽器支持

exec() 是 ECMAScript1 (ES1) 特性。

所有瀏覽器都完全支持 ES1 (JavaScript 1997):

Chrome IE Edge Firefox Safari Opera
支持 支持 支持 支持 支持 支持

正則表達式搜索方法

在 JavaScript 中,正則表達式文本搜索可以用不同的方法完成。

使用模式(pattern)作為正則表達式,這些是最常用的方法:

舉例 描述
text.match(pattern) 字符串方法 match()
text.search(pattern) 字符串方法 search()
pattern.exec(text) RexExp 方法 exec()
pattern.test(text) RexExp 方法 test()