代码之家  ›  专栏  ›  技术社区  ›  JGFMK

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

  •  10
  • JGFMK  · 技术社区  · 15 年前

    我想知道是否有人能澄清。 例如Nicholas Zakas声明函数参数具有格式的签名 函数(match,pos,originalText)(P139:面向Web开发人员的Pro JavaScript第2版:Wrox)

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

    然后我们来看看Doug Crockfords,JavaScript:好的部分。(第90页): searchValue可以是正则表达式-非常匹配。。 如果replaceValue是一个函数,则第一个参数是匹配的文本,第二个参数是捕获组1,第三个参数是捕获组2,依此类推。。

    我还看了Pro JavaScript设计模式(APress P152)中的一个例子,它启动了整个交叉引用过程。这些人(Ross Harmes/Dustin Diaz)用两个名为a&b的参数来指定replaceValue函数是没有帮助的。 但它倾向于强化道格·克罗克福德所描述的概念。

    2 回复  |  直到 15 年前
        1
  •  8
  •   Andy E    15 年前

    扎卡斯是对的,倒数第二个和最后一个论点是 pos originalText . 来自ECMA-262 3rd 5th 版本(第15.5.4.11节):

    如果 replaceValue 是一个函数,然后对于每个匹配的子字符串,使用以下命令调用该函数 +三个论点。参数1是匹配的子字符串。如果 searchValue 参数是 (见15.10.2.1)。论据 string .

    请注意 String.prototype.replace 在ECMA-262第三版中是新的。JScript的MSDN文档和JavaScript的MDC文档都符合此规范。

        2
  •  4
  •   meder omuraliev    15 年前

    String.prototype.replace (searchValue, replaceValue)
    

    如果searchValue是正则表达式(其[[Class]]属性为“RegExp”的对象),请执行以下操作:If searchValue。global为false,然后搜索字符串以查找正则表达式searchValue的第一个匹配项。如果searchValue.global为true,则搜索字符串以查找正则表达式searchValue的所有匹配项。以与String.prototype.match相同的方式进行搜索,包括更新searchValue。上一个索引。设m为searchValue中左捕捉括号的数目(NCapturingParens如15.10.2.1中所指定)。

    如果searchValue不是正则表达式,则让search string为ToString(searchValue),并让searchString为searchString的第一个匹配项。设m为0。

    有点混乱,但我认为扎卡斯是对的。