为什么用new创建的正则表达式先用test后用exec两个都能正确显示结果,而用//创建一个是ture一个是null呢
来源:2-16 编程练习
weixin_慕村1291783
2020-11-12 15:55:59
# 具体遇到的问题
# 报错信息的截图
# 相关课程内容截图
# 尝试过的解决思路和结果
# 粘贴全部相关代码,切记添加代码注释(请勿截图)
<!DOCTYPE html><html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title></head>
<body> <script> var str = '一个"普通字符"在匹配字符串的时候,匹配与它相同的一个字符'; var regexp = /普通字符/g; var regexp2 = new RegExp('普通字符'); console.log(regexp.test(str)); console.log(regexp2.test(str)); console.log(regexp.exec(str)); console.log(regexp2.exec(str)); </script>
</body>
</html>
1回答
同学你好,这是因为使用了全局匹配,改变了正则匹配的起始位置。
第一次匹配之后,lastIndex为7,下次匹配时,是从位置7之后进行匹配,后面没有普通字符四个字了,所以出现了null。
建议:可以手动的调整lastIndex ,这个属性是用于规定下次匹配的起始位置。代码参考:

祝学习愉快~
相似问题