Метод замены 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(/ $/, "");
};

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

42
задан Niels Bom 25 December 2016 в 16:23
поделиться

2 ответа

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

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

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

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


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

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


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

Также, вот некоторые дополнительные материалы с сайта regular-expressions.info:

61
ответ дан 26 November 2019 в 23:48
поделиться

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

9
ответ дан 26 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: