Подтвердить что ты не робот

Метод замены Javascript, замените его на "$ 1"

Я читаю книгу 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" или что это значит. Я думаю, что вызов должен заменить найденный шаблон на "".

4b9b3361

Ответ 1

Каждая пара круглых скобок (... ), где первый символ не является ? *, является "группой захвата", которая помещает его результат в $1, $2, $3, и т.д., которые могут использоваться в шаблоне замены.

Вы также можете видеть то же самое, что и \1, \2, \3 в других машинах с регулярными выражениями (или даже в оригинальном выражении иногда для повторения)

Они называются "обратные ссылки", поскольку они обычно ссылаются на (более раннюю) часть выражения.

(* ? указывает различные формы специального поведения, в том числе не захватывающую группу, которая (?:... ) и просто группы без захвата.)


В вашем конкретном примере $1 будет представлять собой группу (^| ), которая является "позицией начала строки (нулевой ширины) или символом пробела".

Итак, заменив это выражение на все это, вы в основном удаляете переменную theClass и потенциально пространство после нее. (Закрывающее выражение ( |$) - это обратное - пробел или конечная позиция строки - и поскольку его значение не используется, возможно, оно не было захвачено с помощью (?: |$).)


Надеюсь, это все объясняет - дайте мне знать, хотите ли вы больше информации.

Кроме того, здесь некоторое дальнейшее чтение с сайта regular-expressions.info:

Ответ 2

$1 - это обратная связь. Он будет заменен тем, что соответствует первой группе соответствия (набор скобок) в вашем регулярном выражении.