鍍金池/ 問答/HTML/ 關(guān)于js的RegExp.global的問題

關(guān)于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判斷哪個都不執(zhí)行,當正則 `/cat/i` 沒有全局匹配時,結(jié)果也正確。請問這個怎么回事,怎么修改。
回答
編輯回答
貓小柒

都catch(e)了,可以console.error(e)出來看看。

  • 關(guān)鍵字:lastIndex
var reg = /cat/gi
var str = var str = "我是cat,CA"
// 連續(xù)執(zhí)行三遍看看結(jié)果
console.log(reg.exec(newStr))
console.log(reg.exec(newStr))
console.log(reg.exec(newStr))
// 第二次的時候輸出null,恰好在你的邏輯里,取[0]時正是第二遍,所以報錯跳出。
2017年4月3日 18:33