遇到一个死循环的代码,求大神解释一下原因,谢谢!<script> var str = '110报警120急救119火警114查询'; var pattern = /\d*/g //排查定位好像是这里的原因,陷入死循环 var total = 0, match ='', result; while((result = pattern.exec(str))!=null){ match +=result[0]+',' } console.log(match); </script>
2 回答
慕工程0101907
TA贡献1887条经验 获得超5个赞
正则改成/\d+/g/\d*/g可以匹配0个数字,所以就不会停止,死循环了
MDN 正则表达式
正则表达式用于匹配符合一定模式的字符串。*表示匹配前一个表达式0次或多次。
所以/c/g.test("a string")表示字符串"a string"是否有一个c,而/c*/g.test("a string")表示字符串"a string"是否至少有0个c。显然至少有0个是绝对绝对会成立的。所以/c*/g.exec("a string")在一开始就会匹配成功(因为你需要至少0个,就算我开头是a,我返回给你0个c`也就是空字符串也符合你要求,如果你用while来循环,我就一直给你空字符串)。
正则用于匹配符合一定模式的字符串。
比如/b表示单词边界,/string\b/g.test("strings")为false,是因为字符串strings在g后还有s所以不是单词边界。/string\b/g.test("string~~~")为true因为g后面接~,单词已经结束了。
但是这不能说g和~间有一个单词边界/b这样的东西。字符串只是简单的一串字符,string~~~只是s、t、r...~这样一串字符在一起。 /b是否存在是正则表达式解析程序发现你的string~~~是string接~~~,在string就已经结束了一个单词,所以它判定你这个字符串符合/string\b/g这样的模式。
添加回答
举报
0/150
提交
取消
