regexp2和regexp4后面加g的出的是null
来源:2-15 编程练习
曼曼前端
2021-04-23 19:50:13
var str = 'regular expression = regexp';
/*此处写代码*/
var regexp1=/^[a-z]{7}\s[a-z]{10}\s=\s[a-z]{6}$/;
var regexp3=new RegExp('[a-z]{7}\\s[a-z]{10}\\s=\\s[a-z]{6}');
var regexp2=/lar\sexp/;
var regexp4=new RegExp("lar\\sexp");
console.log(regexp2.test(str));
console.log(regexp4.test(str));
var arr1=regexp2.exec(str);
var arr2=regexp4.exec(str);
console.log(arr1);
console.log(arr2);
document.write(regexp2.test(str)+'/'+regexp4.test(str)+'/'+arr1[0]+'/'+arr2[0]);
本题加上g,就不能出结果
1回答
同学你好,因为加了全局匹配修饰符g,使用test和exec方法后,会改变下一次正则匹配的起始位置。
regexp2.test第一次从0开始查找,可以匹配,第二次regexp2.exec就不是从0开始了(是从第一次匹配完之后开始匹配),因为字符串中只有一个lar exp,所以匹配不到为null。
解决方式如下:
1、去掉全局修饰符g
2、手动的调整lastIndex属性值为0,让第二次匹配从起始位置开始匹配。示例:
祝学习愉快~
相似问题
回答 1
回答 1