Как объяснить "$ 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 и множество других фреймворков.