此功能在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.rightContext == "_baz") {
return "ninja";
} else {
return "pirate";
}
});
答案 0 :(得分:2)
如评论所述,不推荐使用许多旧的RegExp属性。 使用另一种语法更安全(通常更短)
var regex= /foo(?=_bar)?/g;
"foo_bar_foo_baz".replace(regex, function(a, b){
return b? "ninja":"pirate";
});
返回值:(String) pirate_bar_ninja_baz