JavaScript字符串替换为正则表达式和函数作为参数

JGF*_*FMK 10 javascript string replace

我在阅读有关此功能的书籍中似乎得到了相互矛盾的建议.我想知道是否有人可以澄清.例如,Nicholas Zakas声明函数参数具有格式函数的签名(match,pos,originalText)(P139:Pro JavaScript for Web Developers 2nd ed:Wrox)

他继续说当正则表达式有一个匹配时,函数会传递三个参数(如上所述).当有多个捕获组时,每个匹配的字符串作为参数传入,最后两个位置是position和originalText ...

然后我们来到Doug Crockfords,JavaScript:The Good Parts.(P90):他再次规定语法为字符串(searcValue,replaceValue)searchValue可以是一个正则表达式 - 很棒的匹配..如果replaceValue是一个函数,第一个参数是匹配的文本,那么第二个是捕获组1,第三个是捕获组2等等.这里有一个明显的区别.(即没有位置参数)

我还在查看Pro JavaScript设计模式(APress P152)中的一个示例,它启动了整个交叉引用过程.这些人(Ross Harmes/Dustin Diaz)用两个名为a&b的参数非常无益地指定了replaceValue函数.但它倾向于强化Doug Crockford描述的概念.

有人可以确认尼古拉斯扎卡斯的描述是否确实是一个有效的选择?

And*_*y E 8

扎卡斯是正确的,倒数第二个和最后的论点是posoriginalText.从ECMA-262 第3版第5版(第15.5.4.11节):

如果replaceValue是函数,则对于每个匹配的子字符串,使用以下m + 3参数调用该函数.参数1是匹配的子字符串.如果searchValue是正则表达式,则下一个m参数是MatchResult中的所有捕获(参见15.10.2.1).参数m + 2是匹配发生的字符串中的偏移量,参数m + 3是string.

请注意,这String.prototype.replace是ECMA-262第3版中的新功能.用于JavaScript的JScript和MDC文档的MSDN文档都符合此规范.