字符串中 split()、match()、search()和 replace()共 4 个方法可以使用正则表达式。而正则表达式本
身也有 2 个方法,见表 7-2 正则表达式的方法。
表 7-2 正则表达式的方法
方法 功能
exec() 在字符串中执行一次正则匹配操作,返回查询结果数组
test() 测试某字符串是否能够匹配模式
exec() 方法
exec()方法在目标字符串中执行一次正则匹配操作,返回找到的第 1 个符合模式的查询结果数组。
例如题目:在“aaaabccccbacabc”中查找“abc”字符串
var reg = /abc/g;
var arr = reg.exec("aaaabccccbacabc");
console.log(arr);
注意,exec()方法是正则表达式的方法,所以是“正则打点调用 exec”而不是“字符串打点调用 exec”。
程序运行后,控制台将输出一个数组,如图 7-23 所示。这个数组中,下标为 1 的项是匹配模式的子字符串,下
标为 2 的项是它所在的位置,下标为 3 的项是原字符串本身。注意到,这个结果和符串的 match()方法是相同
的。
和 match()方法不同的是,如果多次调用 exec()方法,将“递进”返回新的匹配结果,直到没有没有任何
匹配返回 null。例如:
var reg = /abc/g;
console.log( reg.exec("aaaabccccbacabc") );
console.log( reg.exec("aaaabccccbacabc") );
console.log( reg.exec("aaaabccccbacabc") );
程序中调用 exec()方法三次,每次的执行结果是“递进”的。即,JavaScript 系统会自动统计当前是第
几次调用 exec()方法,第 1 次调用的时候将返回第 1 个匹配模式的查询结果,第 2 次调用的时候将返回第 2 个
匹配模式的查询结果,而第 3 次调用的时候,由于没有任何匹配了,就返回 null。
使用 while 语句可以将全部的匹配结果一次性输出:
var reg = /abc/g;
var str = "aaaabccccbacabc";
while(result = reg.exec(str)){
console.log(result);
}
注意到 while 语句的测试条件是一个赋值语句 result = reg.exec(str),这是一个复合写法:在赋值的
同时,也将同时检测等号右侧的值的真假性,如果是 null,则会停止循环。
test() 方法
test()方法用来测试某字符串是否能够匹配模式,返回布尔值。
例如判断字符串“aaddccddabcddeeddfff”是否包含“abc”字符串
var reg = /abc/;
var str = "aaddccddabcddeeddfff";
console.log(reg.test(str)); //true
程序运行后,控制台将输出 true,表示字符串中能够匹配/abc/规定的模式,即字符串中出现了 abc 子字
符串。test()方法是非常简单的一个方法,它只会返回字符串是否匹配模式(true 或者 false),但是不会返
回匹配字符串出现的下标位置。通常用 test()方法进行表单有效性的检查。
字符范围
正则表达式中使用方括号“[]”定义“字符范围”,这也是一种常见的模式。
比如检索字符串中出现的“a1b”或“a2b”:
"a1bcca2bmmmm".match(/a[12]b/g);
方括号[12]表示这一位可以是 1 也可以是 2,但是不能是其它字符,即 1、2 就是这一位的“字符范围”。
可见方括号中的字符串有了“或”的语义。
当匹配全部小写字母、大写字母或数字的时候,可以使用下面特定的写法:
表示小写字母:[a-z]
表示大写字母:[A-Z]
表示所有数字:[0-9]
比如题目:检查字符串“a3M”是否是这样的:第 1 位是小写字母,第 2 位是数字,第 3 位是大写字母。
程序如下:
/[a-z][1-9][A-Z]/.test("a3M"); //true
程序的结果是 true,表示字符串“a3M”符合题目要求的模式。
特别的,在[]内部前面加个“^”符号表示取反,即表示这一位不能为括号里面的字符。例如[^a-z]表示匹
配除了小写字母的其余任意字符。
正则表达式内置了表示几个常见的字符范围简易符号,见表 7-3。
表 7-3 常见的字符范围简易符号
符号 意义
\d 等价于[0-9],表示数字
\D D 等价于[^0-9],表示非数字
\w 等价于[a-zA-Z_0-9],表示单词字符(所有的字母/数字/下划线)
\W \W 等价于[^a-zA-Z_0-9] ,表示非单词字符
. 任意字符