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的进一步阅读: