Javascript替换方法,替换为"$ 1"

Nie*_*Bom 42 javascript regex replace

我正在阅读Sitepoints 2007书籍"Simply Javascript",我遇到了一些我无法理解的代码.

它是以下代码:

Core.removeClass = function(target, theClass)
{
    var pattern = new RegExp("(^| )" + theClass + "( |$)");
    target.className = target.className.replace(pattern, "$1");
    target.className = target.className.replace(/ $/, "");
};
Run Code Online (Sandbox Code Playgroud)

第一次调用replace方法让我很困惑,我不明白"$ 1"值来自何处或意味着什么.我认为调用应该用""替换找到的模式.

Pet*_*ton 61

各对括号(... )其中第一个字符不是?*是"捕获基团",这将它的结果到$1,$2,$3等可以在替换模式中使用.

你可能也看到了同样的事情\1,\2,\3其他正则表达式引擎(或者实际上在原来的表达有时,对于重复)

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

(*?表示各种形式的特殊行为,包括一个非捕获组,它只是(?:...... )并且只是没有捕获的组.)


在您的具体示例中,$ 1将(^| )是"字符串开头位置(零宽度)或单个空格字符"的组.

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


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

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


Dag*_*bit 9

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

  • 不,它不是**被称为后向引用.它被称为"特殊替代模式". (2认同)