Javascript 为什么RegExp.rightContext在匿名函数中引发无效访问错误?
此函数在Chrome中引发“无效访问”错误,在IE中返回错误结果(pirate_bar_pirate_baz),并在Firefox(pirate_bar_ninja_baz)中正常工作。如果从正则表达式中删除全局标志,它可以正常工作,但只适用于第一个“foo”,而不是两个。有什么问题吗Javascript 为什么RegExp.rightContext在匿名函数中引发无效访问错误?,javascript,regex,Javascript,Regex,此函数在Chrome中引发“无效访问”错误,在IE中返回错误结果(pirate_bar_pirate_baz),并在Firefox(pirate_bar_ninja_baz)中正常工作。如果从正则表达式中删除全局标志,它可以正常工作,但只适用于第一个“foo”,而不是两个。有什么问题吗 regex = /foo/g; //regex = /foo/; "foo_bar_foo_baz".replace(regex, function(str) { if (RegExp.rightConte
regex = /foo/g;
//regex = /foo/;
"foo_bar_foo_baz".replace(regex, function(str) {
if (RegExp.rightContext == "_baz") {
return "ninja";
} else {
return "pirate";
}
});
如前所述,许多旧的RegExp属性已被弃用。 使用另一种语法更安全(而且通常更短)
返回值:(String)海盗酒吧(pirate_bar_ninja_baz)看起来像个bug<代码>“xx”.replace(/x/g,function(){RegExp.rightContext;})也会在Chrome中抛出
“非法访问”
,而我认为仅仅获取属性不应该这样做。该属性已弃用,因此不应该再使用,并且可能不会收到修复。请参见使用不同的表达式在匹配中包含字符串,该字符串是if
所需的字符串。这不太有效。“robots_foo_bar_foo_baz_foo_bar”返回“robots_ninja_bar_ninja_baz_ninja_bar”。预期输出为“机器人-忍者-酒吧-海盗-酒吧-忍者-酒吧”。
var regex= /foo(?=_bar)?/g;
"foo_bar_foo_baz".replace(regex, function(a, b){
return b? "ninja":"pirate";
});