Javascript替换方法,替换为“$ 1”

时间:2010-07-13 09:24:04

标签: javascript regex replace

我正在阅读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”值来自何处或意味着什么。我会认为调用应该用“”替换找到的模式。

2 个答案:

答案 0 :(得分:60)

第一个字符不是( *的每对括号) ... ?是一个“捕获组”,它将结果放入$1$2$3等可用于替换模式。

您可能也会在其他正则表达式引擎中看到与\1\2\3相同的内容(或者有时在原始表达式中,以便重复)

这些被称为“反向引用”,因为它们通常会引用表达式中的(较早的)部分。

(* ?表示各种形式的特殊行为,包括非捕获组(?: ... ),只是组而不捕获。)


在您的具体示例中,$ 1将是组(^| ),即“字符串起始位置(零宽度)或单个空格字符”。

因此,通过用它替换整个表达式,你基本上删除了变量theClass,并且可能在它之后删除了一个空格。 (结束表达式( |$)是反向的 - 空格或字符串结束位置 - 由于未使用其值,因此可能无法使用(?: |$)进行捕获。)


希望这能解释一切正常 - 如果您想了解更多信息,请告诉我。

此外,还有一些来自网站regular-expressions.info的进一步阅读:

答案 1 :(得分:9)

$ 1是一个反向引用。它将被正则表达式匹配中的第一个匹配组(括号组)替换。