内容目录
exec()
函数用于使用正则表达式模式在指定字符串中进行匹配查找,并将查找结果以数组形式返回。
该函数属于RegExp
对象(实例),所有主流浏览器均支持该函数。
语法
regExpObject.exec( str )
参数
参数 | 描述 |
---|---|
str | String类型指定的字符串。将在该字符串中执行搜索。 |
返回值
exec()
方法的返回值为Array类型,如果找到了对应的匹配,则返回数组的成员如下:
- 索引
0
:存放第一个匹配的子字符串。- 属性
index
:匹配文本在字符串中的起始索引位置。- 属性
input
:整个字符串对象(stringObject
)。
在 IE 6 ~ IE 8 中,该数组还具有额外的lastIndex
属性,用于存储字符串中匹配文本最后一个字符的下一个位置。
exec()
函数如果没有查找到任何匹配,则返回null
。
值得注意的是,每次执行exec()
函数都只查找最多一个匹配并返回。
如果为正则表达式设置了全局标志(g),exec()
函数仍然只返回最多一个匹配,不过我们再次调用该对象的exec()
函数就可以查找并返回下一个匹配。
其原因是:如果regExpObject
带有全局标志g
,exec()
函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex
所指定的索引处开始查找。该属性值默认为0,所以第一次仍然是从字符串的开头查找。当找到一个匹配时,exec()
函数会将regExpObject.lastIndex
的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。当再次执行exec()
函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
因此,当我们使用exec()
函数执行了一次匹配之后,如果想要重新使用exec()
函数从头开始查找,则需要手动将regExpObject.lastIndex
的值重置为0。如果exec()
函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex
属性重置为 0。
示例&说明
//遍历数组对象的所有成员
function printArray(array){
if(array != null){
for(var i in array){
document.writeln( i + "=" + array[i] + "<br>" );
}
}else{
document.write(null + "<br>");
}
}
var str = "abc12456def45646ghi";
var regExp = /\d+/;
var array = regExp.exec( str );
printArray( array );
/*
0=12456
index=3
input=abc12456def45646ghi
*/
// 带全局标志g
regExp = /[a-z]+/g;
// 第一次查找前,regExp.lastIndex默认为0
document.writeln( "lastIndex=" + regExp.lastIndex + "<br>" ); // lastIndex=0
// 使用exec()进行循环查找匹配
while( array = regExp.exec(str) ){
document.writeln( "lastIndex=" + regExp.lastIndex + "<br>" );
printArray( array );
document.writeln( "<br>" );
}
/*
lastIndex=3
0=abc
index=0
input=abc12456def45646ghi
lastIndex=11
0=def
index=8
input=abc12456def45646ghi
lastIndex=19
0=ghi
index=16
input=abc12456def45646ghi
*/
0 条评论
撰写评论