test() 方法是正则表达式的一个方法,用于检测一个字符串是否匹配某个模式.
test 方法检查字符串是否与给出的正则表达式模式相匹配,如果是则返回 true,否则就返回 false。
每个正则表达式都有一个 lastIndex 属性,用于记录上一次匹配结束的位置.
语法:regexp.test(str)
在全局匹配模式下
对于同一个正则对象重复调用就会出现下一次的匹配位置从上一次匹配结束的位置开始,解决方法重置lastIndex为0
-
let reg = /^[\d]{2}$/g;
-
let str = "12";
-
console.log(reg.test(str)); //返回true
-
let = "123";
-
console.log(reg.test(str)); //从数字3开始匹配,只有一个数字,故返回false
重置lastIndex为0
-
let reg = /^[\d]{2}$/g;
-
let str = "12";
-
console.log(reg.test(str)); //返回true
-
let = "123";
-
reg.lastIndex = 0;
-
console.log(reg.test(str)); //返回true
在非全局匹配模式下,则不存在这个问题
-
let reg = /^[\d]{2}$/;
-
let str = "12";
-
console.log(reg.test(str)); //返回true
-
let = "123";
-
console.log(reg.test(str)); //返回true
另外,test()方法和数组的forEach()方法一起使用可能达不到预期结果,在for循环下,同样如此,如下
-
let line = '1a 123 123 12';
-
let lines = line.split(' ');
-
let reg = /^[\d]+$/g;
-
let res = 0;
-
lines.forEach( function(element, index) {
-
console.log(reg.test(element)); // flase true 交替出现
-
});
使用forEach方法对数组中字符串进行test测试,会出现flase true 交替出现的现象,先出现false还是true则取决数组第一个元素匹配的结果。
同样的,在非全局匹配模式下,则不存在这个问题,这里去掉全局匹配g才可得到预期结果
-
let line = '1a 123 123 12'
-
let lines = line.split(' ');
-
let reg = /^[\d]+$/;
-
let res = 0;
-
lines.forEach( function(element, index) {
-
console.log(reg.test(element)); // false true true true
- });