根据第 6 版JavaScript:权威指南(Flanagan,2011 年):
ECMAScript v3 specifies that the replacement argument to
replace()
may be a function instead of a string.
我正在查看 2005 年编写的一些代码,其中 complicated workaround已用于替换字符串的一部分。代码的注释清楚地表明它最初使用的是函数式 replace()
方法,但为了跨浏览器的兼容性,解决方法是必要的。
ECMAScript v3 于 1999 年问世,据我所知(来自 this discussion post 和 this blog post ),自 2001 年底以来,ECMAScript v3 得到了主流浏览器的支持。作者可能错了,或者有人可以阐明为什么在 2005 年可能需要这种解决方法?
...
更新代码作者的实际评论说:
lambda functions in RegExps are currently a problem with too many browsers.
changed code to work around.
作者代码适用于或运行 this business ,尽管代码本身很可能是个人项目。
最佳答案
此答案基于对上述问题的评论(特别感谢 kangax ,如果他选择留下一个,我可能会接受他的回答!)
虽然我可能从字面上理解为“太多浏览器”,但也有可能 String.replace()
以函数作为参数是 Safari 2.x 中的一个问题(使用 JavaScriptCore) 和 2005 年的 IEMac 5.x。当时存在这些问题的证据 here ,以及上述浏览器的特定版本 here .
事实上,Gavin Kistner 在这些页面的第一页上提到的解决方法在某些浏览器中的性能可能比函数替换方法更好,如讨论的那样 here .
然而,撇开性能不谈,似乎(正如我所怀疑的那样)功能性替换在今天的所有浏览器中都是可以接受的。
非常感谢所有对此问题的评论者。
关于javascript - 所有浏览器什么时候开始支持 String.replace(regexp, replacement_function)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15987403/