Почему совпадение регулярных выражений возвращает больше, чем обычно в nodejs?

#regex #node.js

#регулярное выражение #node.js

Вопрос:

Если я выполню эту инструкцию в node repl

 "hello".match(/(w )(.*)/)
 

Он возвращает это

 [ 'hello',
  'hello',
  '',
  index: 0,
  input: 'hello' ]
 

Я ожидал, что он вернет первые три элемента, откуда взялись другие значения?

Ответ №1:

  • Первый элемент в массиве — это полное совпадение регулярных выражений («группа 0»). Это hello , конечно.
  • Второй элемент — это содержимое совпадения первой группы захвата (w ) . Это hello снова.
  • Третий элемент — это содержимое совпадения второй группы захвата (.*) . Это пустая строка после hello .
  • index это позиция начала совпадения, которая является первым символом строки.
  • input показывает вам строку, для которой было выполнено регулярное выражение, — которая есть hello .

Удивительно сложно найти документы по этому вопросу (по крайней мере, для меня), но вот кое-что из MSDN, описывающее объект, возвращаемый совпадением регулярных выражений: http://msdn.microsoft.com/en-us/library/ie/7df7sf4x (v= против 94).aspx:

Если глобальный флаг не установлен, массив, возвращаемый методом match, имеет два свойства, input и index . input Свойство содержит всю искомую строку. index Свойство содержит позицию совпадающей подстроки в полной искомой строке.

Комментарии:

1. хорошо, я не мог понять, почему появляются свойства index и input, я просто ожидал совпадений.

2. MSDN — это джунгли… Хорошее объяснение, 1 🙂