正则对象的global,判断正则是否使用了全局正则。(使用全局即返回true否则false)为什么我的代码里的if既不是ture也不是falseString.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` 没有全局匹配时,结果也正确。请问这个怎么回事,怎么修改。
1 回答
弑天下
TA贡献1818条经验 获得超8个赞
都catch(e)了,可以console.error(e)出来看看。
关键字:lastIndex。
var reg = /cat/gi
var str = var str = "我是cat,CA"
// 连续执行三遍看看结果
console.log(reg.exec(newStr))
console.log(reg.exec(newStr))
console.log(reg.exec(newStr))
// 第二次的时候输出null,恰好在你的逻辑里,取[0]时正是第二遍,所以报错跳出。
添加回答
举报
0/150
提交
取消