我正在阅读Sitepoints 2007的书“简单Javascript”,我遇到了一些我无法理解的代码。
这是以下代码:
Core.removeClass = function(target, theClass)
{
var pattern = new RegExp("(^| )" + theClass + "( |$)");
target.className = target.className.replace(pattern, "$1");
target.className = target.className.replace(/ $/, "");
};
第一次调用replace方法让我很困惑,我不明白“$ 1”值来自何处或意味着什么。我会认为调用应该用“”替换找到的模式。
答案 0 :(得分:60)
第一个字符不是(
*的每对括号)
... ?
是一个“捕获组”,它将结果放入$1
,$2
,$3
等可用于替换模式。
您可能也会在其他正则表达式引擎中看到与\1
,\2
,\3
相同的内容(或者有时在原始表达式中,以便重复)
这些被称为“反向引用”,因为它们通常会引用表达式中的(较早的)部分。
(* ?
表示各种形式的特殊行为,包括非捕获组(?:
... )
,只是组而不捕获。)
在您的具体示例中,$ 1将是组(^| )
,即“字符串起始位置(零宽度)或单个空格字符”。
因此,通过用它替换整个表达式,你基本上删除了变量theClass
,并且可能在它之后删除了一个空格。 (结束表达式( |$)
是反向的 - 空格或字符串结束位置 - 由于未使用其值,因此可能无法使用(?: |$)
进行捕获。)
希望这能解释一切正常 - 如果您想了解更多信息,请告诉我。
此外,还有一些来自网站regular-expressions.info的进一步阅读:
答案 1 :(得分:9)
$ 1是一个反向引用。它将被正则表达式匹配中的第一个匹配组(括号组)替换。