任何人都可以解释这段Javascript代码吗?

时间:2012-10-24 15:00:54

标签: javascript regex

阅读discussion,我不明白这意味着什么:

 $1X$2

只需 X

关于这个其他代码:

 str = str.replace(/(<script.*?>)(.*)(?=<\/script>)/gi, function(x,y,z)
 {return y+z.replace(/a/gi,'Z')})

这是我不明白的地方:

  • ?=
  • function(x,y,z)如何运作?即从xyz
  • 开始

如果有人能够以清晰的方式解释这段代码,我将非常感激。

3 个答案:

答案 0 :(得分:4)

  1. 用作.replace()调用的第二个参数的字符串“$ 1X $ 2”包括从正则表达式第一个参数引用。组 - 括号中正则表达式的一部分 - 收集它们匹配的字符以供日后使用。子串“$ 1”和“$ 2”表示“组1匹配的任何东西”(或组2)。

  2. 当调用.replace()的第二个参数是函数时,JavaScript会将匹配信息作为参数传递给函数。第一个参数始终是整个匹配。后续参数是匹配的组。

  3. 因此:

    alert("hello world".replace(/(ell)(o w)/, "$2$1");
    // alerts "ho wellorld"
    

答案 1 :(得分:4)

这就是捕捉群体。 ()捕获所有内容,以便您以后可以访问匹配的子字符串。

$1指的是第一个捕获组$2指向第二个(分别是第一对和第二对括号)。 ($0将引用整场比赛。)

具有回调函数的变体也是如此,但此处变量xyz填充了捕获的组(对应于$0,{分别为{1}}和$1

最后$2打开了一个预测。这声称匹配中的这个可能性后跟?=而没有实际推进匹配字符串中的正则表达式引擎,也没有在匹配中包含此部分。

答案 2 :(得分:4)

$ 1和$ 2引用捕获的子表达式(由括号()分隔)从前一个参数中的正则表达式引用到.replace()

?=是一个积极的前瞻。 http://www.regular-expressions.info/lookaround.html

function(x, y, z)是一个匿名函数表达式,与引用$ 1和$ 2类似,但它将它们存储在变量中。