此功能在Chrome中引发“无效访问”错误,在IE(pirate_bar_pirate_baz)中返回错误结果,并在Firefox中正常工作(pirate_bar_ninja_baz)。如果从正则表达式中删除全局标志,它可以正常工作,但仅适用于第一个“foo”而不是两个。有什么问题?为什么RegExp.rightContext在匿名函数内引发无效访问错误?
regex = /foo/g;
//regex = /foo/;
"foo_bar_foo_baz".replace(regex, function(str) {
if (RegExp.rightContext == "_baz") {
return "ninja";
} else {
return "pirate";
}
});
似乎是一个错误。 ''xx“.replace(/ x/g,function(){RegExp.rightContext;});'也会抛出''非法访问''在Chrome中,而只是取得属性不应该这样做,我假设。 – pimvdb 2012-02-06 21:01:19
该属性已弃用,因此不应再使用,可能不会收到修复程序。请参阅https://developer.mozilla.org/en/JavaScript/Reference/Deprecated_Features使用不同的表达式将字符串包含在您需要的if中。 – 2012-02-06 21:04:59