遇到一个死循环的代码,求大神解释一下原因,谢谢!
<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>
正则改成
/\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
这样的模式。