Как объяснить "$ 1, $2" в Javascript при использовании регулярного выражения?

Часть кода Javascript выглядит следующим образом:

    num="11222333";
    re = /(\d+)(\d{3})/;
    re.test(num);
    num.replace(re, "$1,$2");

Я не мог понять грамматику "$ 1, $2". Книга, из которой этот код приходит, говорит, что $1 означает RegExp. $1, $2 означает RegExp. $2. Но эти объяснения приводят к большему количеству вопросов:

  • Известно, что в Javascript имя переменных должно начинаться с буквы или _, как $1 может быть допустимым именем переменной-члена RegExp здесь?

  • Если я ввожу $1, командная строка говорит, что она не определена; если я ввожу "$ 1", командная строка только эхо составляет $1, а не 11222. Итак, как метод замещения знает, что означает "$ 1, $2"?

Спасибо.

Ответ 1

Это не "переменная" - это заполнитель, который используется в вызове .replace(). $n представляет группу захвата nth регулярного выражения.

num="11222333";

// This regex captures the last 3 digits as capture group #2
// and all preceding digits as capture group #1
re = /(\d+)(\d{3})/;

re.test(num);

// This replace call replaces the match of the regex (which happens
// to match everything) with the first capture group ($1) followed by
// a comma, followed by the second capture group ($2)
num.replace(re, "$1,$2");

Ответ 2

Вы неверно истолковываете эту строку кода. Вы должны рассмотреть строку "$1,$2" спецификатор формата , которая внутренне используется функцией replace, чтобы знать, что делать. Он использует ранее проверенное регулярное выражение, которое дало 2 результата (два скобок в скобках) и переформатирует результаты. $1 относится к первому совпадению, $2 ко второму. Таким образом, ожидаемое содержимое строки num 11222,333 после этого бита кода.

Ответ 3

Известно, что в Javascript имя переменных должно начинаться с буквы или _,

Нет, нет. $1 - вполне допустимая переменная. Сначала вам нужно назначить ему:

$variable = "this is a test"

Так jQuery использует переменную с именем $ как псевдоним для объекта jQuery.

Ответ 4

$1 - первая группа из вашего регулярного выражения, вторая - вторая. Группы определяются скобками, поэтому ваша первая группа ($ 1) - это то, что соответствует (\ d +). Вам нужно будет кое-что прочитать на регулярных выражениях, чтобы понять, что это соответствует.

Известно, что в Javascript имя переменных должно начинаться с буквы или _, как $1 может быть допустимым именем переменной-члена RegExp здесь?

Это неверно. $- допустимое имя переменной, равное $1. Вы можете найти это, просто попробовав это. См. JQuery и множество других фреймворков.