阅读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)
如何运作?即从x
,y
和z
?如果有人能够以清晰的方式解释这段代码,我将非常感激。
答案 0 :(得分:4)
用作.replace()
调用的第二个参数的字符串“$ 1X $ 2”包括从正则表达式第一个参数引用组。组 - 括号中正则表达式的一部分 - 收集它们匹配的字符以供日后使用。子串“$ 1”和“$ 2”表示“组1匹配的任何东西”(或组2)。
当调用.replace()
的第二个参数是函数时,JavaScript会将匹配信息作为参数传递给函数。第一个参数始终是整个匹配。后续参数是匹配的组。
因此:
alert("hello world".replace(/(ell)(o w)/, "$2$1");
// alerts "ho wellorld"
答案 1 :(得分:4)
这就是捕捉群体。 (
和)
捕获所有内容,以便您以后可以访问匹配的子字符串。
$1
指的是第一个捕获组$2
指向第二个(分别是第一对和第二对括号)。 ($0
将引用整场比赛。)
具有回调函数的变体也是如此,但此处变量x
,y
和z
填充了捕获的组(对应于$0
,{分别为{1}}和$1
。
最后$2
打开了一个预测。这声称匹配中的这个可能性后跟?=
而没有实际推进匹配字符串中的正则表达式引擎,也没有在匹配中包含此部分。
答案 2 :(得分:4)
$ 1和$ 2引用捕获的子表达式(由括号()
分隔)从前一个参数中的正则表达式引用到.replace()
。
?=是一个积极的前瞻。 http://www.regular-expressions.info/lookaround.html
function(x, y, z)
是一个匿名函数表达式,与引用$ 1和$ 2类似,但它将它们存储在变量中。