Please note, this is a STATIC archive of website developer.mozilla.org from November 2016, cach3.com does not collect or store any user information, there is no "phishing" involved.

RegExp.prototype.exec()

概述

exec() 方法为指定的一段字符串执行搜索匹配操作。它的返回值是一个数组或者 null

如果你仅仅是为了知道是否匹配,可以使用 RegExp.test() 方法,或者 String.search() 方法。

语法

regexObj.exec(str)

参数

str
要用正则表达式匹配的字符串。

返回值

如果成功匹配,exec 方法返回一个数组,并且更新正则表达式对象的属性。返回的数组包括匹配的字符串作为第一个元素,紧接着一个元素对应一个成功匹配被捕获的字符串的捕获括号(capturing parenthesis)。(one item for each capturing parenthesis that matched containing the text that was captured.)

如果匹配失败exec 方法将返回  null

描述

思考下面的例子:

// Match "quick brown" followed by "jumps", ignoring characters in between
// Remember "brown" and "jumps"
// Ignore case
var re = /quick\s(brown).+?(jumps)/ig;
var result = re.exec('The Quick Brown Fox Jumps Over The Lazy Dog');

下面的表格展示这个脚本的返回值:

对象 属性/索引 描述 例子
result [0] 匹配的全部字符串 Quick Brown Fox Jumps
[1], ...[n ] 括号中的分组捕获 [1] = Brown
[2] = Jumps
index 匹配到的字符位于原始字符串的基于0的索引值 4
input 原始字符串 The Quick Brown Fox Jumps Over The Lazy Dog
re lastIndex 下一次匹配开始的位置 25
ignoreCase 是否使用了'i'标记使正则匹配忽略大小写 true
global 是否使用了'g'标记来进行全局的匹配. true
multiline

是否使用了'm'标记使正则工作在多行模式(也就是,^ 和 $ 可以匹配字符串中每一行的开始和结束(行是由 \n 或 \r 分割的),而不只是整个输入字符串的最开始和最末尾处。)

false
source 正则模式的字符串 quick\s(brown).+?(jumps)

示例

例子1:查找所有匹配

当正则表达式使用 "g" 标志时,可以多次执行 exec 方法来查找同一个字符串中的成功匹配。当你这样做时,查找将从正则表达式的  lastIndex 属性指定的位置开始。(test() 也会更新 lastIndex 属性)。例如,你使用下面的脚本:

var myRe = /ab*/g;
var str = 'abbcdefabh';
var myArray;
while ((myArray = myRe.exec(str)) !== null) {
  var msg = 'Found ' + myArray[0] + '. ';
  msg += 'Next match starts at ' + myRe.lastIndex;
  console.log(msg);
}

脚本运行结果如下:

Found abb. Next match starts at 3
Found ab. Next match starts at 9

注意:不要把正则表达式字面量(或者正则表达式构造器)放在 while 条件表达式里。由于每次迭代时 lastIndex 的属性都被重置,如果匹配,将会造成一个死循环。

例子2:结合 RegExp 字面量使用 exec()

你也可以直接使用 exec() 而不是创建一个 RegExp 对象:

var matches = /(hello \S+)/.exec('This is a hello world!');
console.log(matches[1]);

运行上面的代码,会弹出一个内容为 "hello world!" 的对话框。

规范

Specification Status Comment
ECMAScript 3rd Edition. Implemented in JavaScript 1.2 Standard Initial definition. Implemented in JavaScript 1.2.
ECMAScript 5.1 (ECMA-262)
RegExp.exec
Standard  
ECMAScript 2015 (6th Edition, ECMA-262)
RegExp.exec
Standard  

浏览器兼容性

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Yes) (Yes) (Yes) (Yes) (Yes)
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support (Yes) (Yes) (Yes) (Yes) (Yes) (Yes)

相关链接

文档标签和贡献者

 此页面的贡献者: LiiiiittleRain, paddingme, baiya, teoli, AlexChao, ziyunfei, LinusYu
 最后编辑者: LiiiiittleRain,