方法 | 所属对象 | 参数 | 返回值 | 通用性 | 特殊性 |
---|---|---|---|---|---|
exec | 正则表达式 | 字符串 | 匹配结果的数组,如果没有找到,返回值为 null | 通用强大 | 一次只能匹配一个单元,并提供详细的返回信息 |
test | 正则表达式 | 字符串 | 布尔值,表示是否匹配 | 快速验证 | 一次只能匹配一个单元,返回信息与 exec() 基本类似 |
compile | 正则表达式 | 正则表达式 | 在脚本执行过程中改变或重新编译正则表达式 | ||
search | 字符串 | 正则表达式 | 匹配起始位置,如果没有找到匹配的字符串,则返回 -1 | 简单字符定位 | 不执行全局匹配,将忽略标志 g ,也会忽略正则表达式的 lastIndex 属性 |
match | 字符串 | 正则表达式 | 匹配的数组,或者匹配信息的数组 | 常用字符串匹配方法 | 将根据全局标志 g 决定是否全局匹配 |
replace | 字符串 | 正则表达式,或替代文本 | 返回替代后的新字符串 | 匹配替代操作 | 可以支持替代函数,同时可以获取过呢更多匹配信息 |
split | 字符串 | 正则表达式 分隔符号 | 返回数组 | 特殊用途 | 把字符串分割为字符串数组 |
用正则表达式模式在字符串中运行查找,并返回包含该查找结果的一个数组
语法格式如下:
RegExp.exec(str);
RegExp :必选项。包含正则表达式模式和可用标志的正则表达式对象。
str :必选项。要在其中执行查找的 String 对象或字符串文字。
返回值:如果 exec 方法没有找到匹配,则它返回 null 。如果它找到匹配,则 exec 方法返回一个数组,并且更新全局 RegExp 对象的属性,以反映匹配结果。数组的 0 元素包含了完整的匹配,而第 1 到 n 个元素中包含的是匹配中出现的任意一个子匹配。这相当于没有设置全局标志( g )的 match 方法。
如果为正,则表达式设置了全局标志, exec 从以 lastIndex 的值指示的位置开始查找。如果没有设置全局标志, exec 忽略 lastIndex 的值,从字符串的起始位置开始搜索。
exec 方法返回的数组有三个属性,分别是 input 、 index 和 lastIndex 。 input 属性包含了整个被查找的字符串。 index 属性中包含了整个被查找字符串中被匹配的子字符串的位置。 lastIndex 属性中包含了最后一次匹配中最后一个字符的下一个位置。
在非全局模式下, exec() 方法返回的数组与 String.match() 返回的值相同。全局模式下,返回结果不同。当调用 exec() 方法时,会为正则表达式对象定义 lastIndex 属性,指定执行下次匹配的起始位置,同时返回匹配到的数组,与非全局模式下的数组结构相同,而 String,match() 方法仅返回匹配文本组成的数组,没有附加信息。因此,全局模式下获取完整的匹配信息只能用 exec() 。
在 exec() 方法找到了与表达式相匹配的文本后,会重置 lastIndex 属性为匹配文本的最后一个字符下标位置 +1 ,为下次匹配的起始位置。因此,通过反复调用 exec() 方法可以遍历字符串,实现全局的匹配操作,如果找不到匹配文本,将返回 null ,并重置 lastIndex 为 0 。
var s = 'JavaScript'; // 测试使用的字符串直接量
var r = /\w/g; // 匹配模式
while ((a = r.exec(s))) {
// 循环执行匹配操作
console.log(
' 匹配文本 = ' +
a[0] +
' a.index = ' +
a.index +
' r.lastIndex = ' +
r.lastIndex,
);
// 显示每次匹配操作后返回的数组信息
}
返回一个 Boolean 值,它指出在被查找的字符串中是否存在模式。
语法格式如下:
regexp.test(str);
Regexp :必选项。包含正则表达式模式或可用标志的正则表达式对象。
str :必选项。要在其上测试查找的字符串。
返回值: test 方法检查在字符串中是否存在一个模式,如果存在,则返回 true ,否则就返回 false 。全局 RegExp 对象的属性不由 test 方法来修改。
在全局模式下, test ()等价于 exec ()方法。配合循环语句,它们能够迭代字符串,执行全局匹配操作, test ()返回布尔值, exec ()返回数组或者 null 。虽然, test ()方法返回值是布尔值,但是通过正则表达式对象的属性和 RegExp 静态属性,依然可以获得每次迭代操作的匹配信息。
var s = 'JavaScript';
var r = /\w/g;
while (r.test(s)) {
console.log(
' 匹配文本 = ' + RegExp.lastMatch + 'r.lastIndex = ' + r.lastIndex,
);
}
使用正则表达式模式对字符串执行查找,并将包含查找的结果作为数组返回
语法格式如下:
stringObj.match(RegExp);
stringObj :必选项,对其进行查找的 String 对象或字符串文字。
RegExp :必选项,为包含正则表达式模式和可用标志的正则表达式对象,也可以是包含正则表达式模式和可用标志的变量名或字符串文字。
返回值:如果 match 方法没有找到匹配,返回 null 。如果找到匹配,返回一个数组并且更新全局 RegExp 对象的属性以反映匹配结果。
match 方法返回的数组有三个属性: input 、 index 和 lastIndex 。 input 属性包含整个被查找的字符串。 index 属性包含了在整个被查找字符串中被匹配的子字符串的位置。 lastIndex 属性包含了最后一次匹配中最后一个字符的下一个位置。
如果没有设置全局标志( g ),数组的 0 元素包含整个匹配,而第 1 到 n 个元素包含了匹配中曾出现过的任意一个子匹配。这相当于没有设置全局标志的 exec 方法。如果设置了全局标志,元素 0 到 n 中包含所有匹配。
返回与正则表达式查找内容匹配的第一个子字符串的位置。
语法格式如下:
stringObj.search(RegExp);
stringObj :必选项,要在其上进行查找的 String 对象或字符串文字。
RegExp :必选项,包含正则表达式模式和可用标志的正则表达式对象。
返回值: search 方法指明是否存在相应的匹配。如果找到一个匹配, search 方法将返回一个整数值,指明这个匹配距离字符串开始的偏移位置。如果没有找到匹配,则返回 -1 。
replace 方法使用正则表达式模式对字符串执行搜索,并对搜索到的内容用指定的字符串替换,返回一个字符串对象,包含了替换后的内容
语法格式如下:
replace(RegExp.replaceText);
RegExp :搜索时要使用的表达式对象。如果是字符串,不按正则表达式的方式进行模糊搜索,而进行精确搜索。
replaceText :用于替换搜索到的内容的字符串,其中可以使用一些特殊的字符组合来表示匹配变量。其中,$&是整个表达式模式在被搜索字符串中所匹配的字符串,$是表达式模式在被搜索字符串中所匹配的字符串左边的所有内容,$ ' 是表达式模式在被搜索字符串中所匹配的字符串右边的所有内容,$$则是普通意义的 " $ " 字符。
说明 $ 1... $ 9 分别是第 1 个到第 9 个子匹配所捕获到的内容,$ 01... $ 99 分别是第 1 个到第 99 个子匹配所捕获到的内容。当$ n 和$ nn ( n 为正整数)在表达式中没有对应的子匹配时,将被解释成普通字符。
该方法返回按照某种分割标志符将一个字符串拆分为若干个子字符串时所产生的子字符串数组。
语法格式如下:
split([separator[,limit]]);
separator :分割标志符参数,可以是多个字符或一个正则表达式,并不作为返回数组元素的一部分。
limit :限制返回元素的个数。
使用正则表达式的 compile() 方法,能够重新编译正则表达式。这样就可以在执行过程中动态修改正则表达式的匹配模式。
compile() 方法与 RegExp ()构造函数的用法相同
regexp.compile(regexp, modifier);
参数 regexp 便是正则表达式对象,或者匹配模式字符串、当第 1 个参数为匹配模式字符串时,可以设置第 2 个参数 modifier ,使用它的定义的匹配类型,如 " g " 、 " i " 、 " gi " 。
var s = 'JavaScript';
var r = /\w/g;
while (r.test(s)) {
if (r.lastIndex == 3) {
r.compile(/[A-Z]/g);
r.lastIndex = 3;
}
console.log(
' 匹配文本 = ' + RegExp.lastMatch + ' r.lastIndex = ' + r.lastIndex,
);
}
在上面代码中, "r.compile(/[A-Z]/g);" 可以使用 "r.compile("[A-Z]","g");" 。
在一个字符串中完成一次模式匹配之后,若想再开始检索新的字符串,就必须手动将正则表达式对象的 lastIndex 属性重置为 0 ;
重新编译后,正则表达式所包含的信息都被恢复到初始位置,如 lastIndex 变成 0 。因此,如果想继续匹配,就必须设置 lastIndex 属性,定义继续的匹配位置。反之,当执行正则表达式匹配操作之后,如果想用该正则表达式继续匹配其它字符,不妨利用下面的方法恢复初始状态,而不是用手动重置 lastIndex 属性
regexp.compile(regexp);
var str1 = 'Every man in the world! Every women on the earth!';
var p = /man/g;
var str2 = str1.replace(p, 'person');
console.log(str2 + '');
var p = /(wo)?men/g;
p.compile(p);
str2 = str1.replace(p, 'person');
console.log(str2);