结果显示不全

来源:2-15 编程练习

qq_慕用6596887

2020-10-12 23:09:19

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>正则表达式</title>
</head>
<body>

<script type="text/javascript">
    var str = 'regular expression = regexp';
    /*此处写代码*/
    var regexp = /(lar exp)+/g;
    var result;
    console.log(regexp.test(str));
    while (result = regexp.exec(str)){
        console.log(result[0]);
    }
</script>
</body>

</html>

请问为什控制台的结果没有lar exp这一结果。

但执行

var result = regexp.exec(str);
console.log(result)

又会返回一个结果。这是为啥?

写回答

2回答

好帮手慕鹤

2020-10-13

同学你好,老师刚才的回答有些问题,同学重新查看下这条回复:

http://img.mukewang.com/climg/5f8513be099f434507880258.jpg

当添加了全局修饰符 g ,这个 regexp 是一个全局正则表达式时,同时使用test()和exec()方法,test()检测到字符串,并返回true,再使用exec()继续检测的时候,它会从上一次检索结束的位置开始进行检索看,如下:

http://img.mukewang.com/climg/5f8517b309c7dd4809570334.jpg

已经检索过的字符中指定的字符处开始检索字符串,此时已经检索过的str了,再使用exec()就找不到符和规则的字符了,所以内容没有输出,可以在str中再添加个“lar exp”查看效果来增加理解,如下:

http://img.mukewang.com/climg/5f85177709e1725208020346.jpg

输出:

http://img.mukewang.com/climg/5f85174609cfc63b02130061.jpg

祝学习愉快!

3

好帮手慕鹤

2020-10-13

同学你好,针对问题进行回复:

1、在代码中,while里面的条件result = regexp.exec(str)一直不成立,所以没有进入while里面,执行不了里面的代码。

result一开始并没有被赋值,所以读取到while循环的时候,条件不成立,所以result[0]不会被输出。

http://img.mukewang.com/climg/5f850a870951a76506200209.jpg

2、但执行var result = regexp.exec(str);console.log(result)又会返回一个结果。这是为啥?

这是因为在执行代码的时候,通过exec() 方法检索出来的字符串赋给了新的变量result,此时result已经有了值,所以就能够输出了。

效果修改如下:
http://img.mukewang.com/climg/5f850d0c0938c13e06740280.jpg

输出:

http://img.mukewang.com/climg/5f850d170903789d01540051.jpg

如果帮助到了你,欢迎采纳,祝学习愉快!

0
hq_慕用6596887
h 可老师视频讲解时就是用的这种写法,while()里先把regexp. exec(str)赋值给result,在判断result的值是不是null
h020-10-13
共1条回复

0 学习 · 15276 问题

查看课程