2012-02-06 33 views
1

此功能在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"; 
    } 
}); 
+0

似乎是一個錯誤。 ''xx「.replace(/ x/g,function(){RegExp.rightContext;});'也會拋出''非法訪問''在Chrome中,而只是取得屬性不應該這樣做,我假設。 – pimvdb 2012-02-06 21:01:19

+0

該屬性已棄用,因此不應再使用,可能不會收到修復程序。請參閱https://developer.mozilla.org/en/JavaScript/Reference/Deprecated_Features使用不同的表達式將字符串包含在您需要的if中。 – 2012-02-06 21:04:59

回答

2

正如已評論的,許多較早的RegExp屬性已被棄用。 使用的另一種語法是安全的(且經常短)

var regex= /foo(?=_bar)?/g; 
"foo_bar_foo_baz".replace(regex, function(a, b){ 
    return b? "ninja":"pirate"; 
}); 

返回值:(字符串)pirate_bar_ninja_baz

+0

這不起作用。 「robots_foo_bar_foo_baz_foo_bar」返回「robots_ninja_bar_ninja_baz_ninja_bar」。預期的輸出是「robots_ninja_bar_pirate_baz_ninja_bar」。 – adorr 2012-02-06 22:51:34

相關問題