遇到一个死循环的代码,求大神解释一下原因,谢谢!<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
提交
取消