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() |