Javascript заменить метод, заменить на «$ 1» - PullRequest
42 голосов
/ 13 июля 2010

Я читаю книгу 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(/ $/, "");
};

Первый вызов метода замены - это то, что меня озадачивает, я не понимаю, откуда берется значение «$ 1» или что оно означает. Я бы подумал , что вызов должен заменить найденный шаблон на "".

Ответы [ 2 ]

60 голосов
/ 13 июля 2010

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

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

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

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


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

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


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

Также, вот некоторые дальнейшие чтения с сайта регулярные-выражения.info :

9 голосов
/ 13 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...