关于正则的一些问题

遇到一个死循环的代码,求大神解释一下原因,谢谢!


<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>


弑天下
浏览 468回答 2
2回答

慕工程0101907

正则改成/\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...~这样一串字符在一起。&nbsp;/b是否存在是正则表达式解析程序发现你的string~~~是string接~~~,在string就已经结束了一个单词,所以它判定你这个字符串符合/string\b/g这样的模式。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript