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

关于js的RegExp.global的问题

关于js的RegExp.global的问题

凤凰求蛊 2019-03-20 17:13:19
正则对象的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]时正是第二遍,所以报错跳出。


查看完整回答
反对 回复 2019-03-22
  • 1 回答
  • 0 关注
  • 318 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信