JavaScript正则表达式中test、exec与match方法的区别详解

作者:代码拾荒时间:2026-10-27 21:58:35浏览:346

本文详细解析JavaScript中正则表达式的三个核心方法:test、exec和match。test返回布尔值用于判断是否存在匹配;exec返回匹配数组及index、lastIndex等属性,受全局标志g影响会迭代查找;match作为字符串方法,无g时类似exec,有g时返回所有匹配结果。通过代码示例对比三者在不同场景下的行为差异。

test、exec与match方法概述

本文旨在说明JavaScript正则表达式中test、exec和match这三个方法的具体区别。

test方法:返回布尔值

test方法用于检测字符串中是否存在符合正则表达式模式的内容,返回布尔值。例如: var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.test(str)); // 输出 true

exec方法:返回匹配数组及属性

exec方法用于查找并返回当前匹配结果,以数组形式返回。例如: var str = "1a1b1c"; var reg = new RegExp("1.", ""); var arr = reg.exec(str); 如果未找到匹配项,arr为null;否则arr是一个长度为1的数组,包含当前匹配项。此外,返回的数组还包含三个属性:index表示匹配项在原字符串中的起始位置;lastIndex表示匹配项结束的位置(即index加上匹配项长度);input属性存储原始字符串,如上述示例中的str。

exec方法中全局标志g的影响

exec方法的行为受正则表达式参数g(全局匹配)的影响。若未指定g,每次调用exec都从字符串开头开始查找。例如: var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]); 上述两次调用均输出1a。若指定参数g,exec会从上次匹配的lastIndex位置继续查找。例如: var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(reg.exec(str)[0]); alert(reg.exec(str)[0]); 第一次调用输出1a,第二次调用输出1b。

match方法:字符串对象的全局匹配

match是String对象的方法,而exec是RegExp对象的方法。例如: var str = "1a1b1c"; var reg = new RegExp("1.", ""); alert(str.match(reg)); match与exec类似,但对参数g的处理不同。若指定g,match会一次性返回所有匹配结果组成的数组。例如: var str = "1a1b1c"; var reg = new RegExp("1.", "g"); alert(str.match(reg)); // 结果与上一句相同 返回值为包含三个元素的数组:1a、1b、1c。 JavaScript开发中常涉及正则表达式,其中Match、Test和Exec最为常用。以下通过代码实例展示它们的具体差异。

代码示例对比

Match方法示例

代码如下:

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var rs = str.match(regexp);
// rs = Array('A', 'B', 'C', 'D', 'E', 'a', 'b', 'c', 'd', 'e');

Test方法示例

Test方法示例

代码如下:

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var rs = regexp.test(str);
// rs = true; 返回布尔值

Exec方法示例

Exec方法迭代示例

代码如下:

var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
var regexp = /[A-E]/gi;
var rs;
while ((rs = regexp.exec(str)) != null)
{
document.write(rs);
document.write(regexp.lastIndex);
document.write("<br />");
}
OUTPUT
---------------------------------
A 1
B 2
C 3
D 4
E 5
a 27
b 28
c 29
d 30
e 31

另一个Exec方法示例

Exec方法复杂匹配示例

代码如下:

var regexp = /ab*/g;
var str = "abbcdefabh";
var rs;
while ((rs = regexp.exec(str)) != null)
{
document.write(rs);
document.write(regexp.lastIndex);
document.write("<br />");
}
OUTPUT
---------------------------------
abb 3
ab 9
作者最新文章