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回答

好帮手慕慕子

2021-04-24

同学你好,因为加了全局匹配修饰符g,使用test和exec方法后,会改变下一次正则匹配的起始位置。

regexp2.test第一次从0开始查找,可以匹配,第二次regexp2.exec就不是从0开始了(是从第一次匹配完之后开始匹配),因为字符串中只有一个lar exp,所以匹配不到为null。

解决方式如下:

1、去掉全局修饰符g

2、手动的调整lastIndex属性值为0,让第二次匹配从起始位置开始匹配。示例:

http://img.mukewang.com/climg/6083793c092063f013810508.jpg

祝学习愉快~

0

0 学习 · 15276 问题

查看课程