为了账号安全,请及时绑定邮箱和手机立即绑定

关于正则的一些问题

关于正则的一些问题

弑天下 2019-03-13 21:14:14
遇到一个死循环的代码,求大神解释一下原因,谢谢!<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,是因为字符串stringsg后还有s所以不是单词边界。/string\b/g.test("string~~~")true因为g后面接~,单词已经结束了。
但是这不能说g~间有一个单词边界/b这样的东西。字符串只是简单的一串字符,string~~~只是str...~这样一串字符在一起。 /b是否存在是正则表达式解析程序发现你的string~~~string~~~,在string就已经结束了一个单词,所以它判定你这个字符串符合/string\b/g这样的模式


查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 467 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号