关于js的RegExp.global的问题

正则对象的global,判断正则是否使用了全局正则。(使用全局即返回true否则false)

为什么我的代码里的if既不是ture也不是false


String.prototype.replaces=function(reg,str){

    var arr = [];

    var newStr= this;

    var i= '';

    

    while(reg.exec(newStr)!='null') {

        

        try{

            

            arr = newStr.split(reg.exec(newStr)[0]);

            newStr = arr.join(str);

            if(!reg.global){

                alert(1)

                return newStr;

            }else{

                alert(0)

            }

        }catch(e){

            return newStr;

        }

        

    }

    

}

var str = "我是cat,CAT";

var d =str.replaces(/cat/gi,'99');

console.log(d)



代码是仿写原生`String.replace()`方法。

当全局正则匹配(/g)到一个以上的替换字符串时("cat"),都正常。

当全局正则匹配到只有一个时,`var str = "我是cat,CA";` ,上面代码if判断哪个都不执行,当正则 `/cat/i` 没有全局匹配时,结果也正确。请问这个怎么回事,怎么修改。


凤凰求蛊
浏览 319回答 1
1回答

弑天下

都catch(e)了,可以console.error(e)出来看看。关键字:lastIndex。var reg = /cat/givar str = var str = "我是cat,CA"// 连续执行三遍看看结果console.log(reg.exec(newStr))console.log(reg.exec(newStr))console.log(reg.exec(newStr))// 第二次的时候输出null,恰好在你的逻辑里,取[0]时正是第二遍,所以报错跳出。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript