为什么RegExp.rightContext会在匿名函数中引发无效的访问错误?

时间:2012-02-06 20:53:14

标签: 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.rightContext == "_baz") {
    return "ninja";
  } else {
    return "pirate"; 
  }
});

1 个答案:

答案 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