2

阅读此讨论,我不明白这是什么意思:

 $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

如果有人能清楚地解释这段代码,我将不胜感激。

4

3 回答 3

4
  1. 用作.replace()调用的第二个参数的字符串“$1X$2”包括对来自正则表达式第一个参数的组的引用。组 - 括号中的正则表达式部分 - 收集它们匹配的字符以供以后使用。子字符串 "$1" 和 "$2" 的意思是“与组 1 匹配的任何内容”(或组 2)。

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

因此:

alert("hello world".replace(/(ell)(o w)/, "$2$1");
// alerts "ho wellorld"
于 2012-10-24T15:04:51.587 回答
4

这都是关于捕获组的。()捕获两者之间的所有内容,以便您以后可以访问匹配的子字符串。

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

带有回调函数的变体执行相同的操作,但这里的变量和x填充了捕获的组(分别对应于和)。yz$0$1$2

最后?=打开一个前瞻。这断言匹配中的这个位置后面<\/script>没有实际推进匹配字符串中的正则表达式引擎,也没有在匹配中包含这部分。

于 2012-10-24T15:04:55.780 回答
4

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

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

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

于 2012-10-24T15:05:13.100 回答