阅读此讨论,我不明白这是什么意思:
$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
?
如果有人能清楚地解释这段代码,我将不胜感激。
阅读此讨论,我不明白这是什么意思:
$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
?如果有人能清楚地解释这段代码,我将不胜感激。
用作.replace()
调用的第二个参数的字符串“$1X$2”包括对来自正则表达式第一个参数的组的引用。组 - 括号中的正则表达式部分 - 收集它们匹配的字符以供以后使用。子字符串 "$1" 和 "$2" 的意思是“与组 1 匹配的任何内容”(或组 2)。
当调用的第二个参数.replace()
是函数时,JavaScript 将匹配信息作为参数传递给函数。第一个参数始终是整个匹配。随后的参数是匹配的组。
因此:
alert("hello world".replace(/(ell)(o w)/, "$2$1");
// alerts "ho wellorld"
这都是关于捕获组的。(
并)
捕获两者之间的所有内容,以便您以后可以访问匹配的子字符串。
$1
指的是第一个捕获的组,$2
第二个(分别是第一对和第二对括号)。($0
将指整个比赛。)
带有回调函数的变体执行相同的操作,但这里的变量和x
填充了捕获的组(分别对应于和)。y
z
$0
$1
$2
最后?=
打开一个前瞻。这断言匹配中的这个位置后面<\/script>
没有实际推进匹配字符串中的正则表达式引擎,也没有在匹配中包含这部分。
()
$1 和 $2 引用从前一个参数到的正则表达式中捕获的子表达式(由括号分隔) .replace()
。
?= 是一个积极的前瞻。http://www.regular-expressions.info/lookaround.html
这function(x, y, z)
是一个匿名函数表达式,它与引用 $1 和 $2 做类似的事情,但它将它们存储在变量中。