Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么RegExp.rightContext在匿名函数中引发无效访问错误?_Javascript_Regex - Fatal编程技术网

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

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

此函数在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"; 
  }
});

如前所述,许多旧的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";
});