Как RegExp.exec заполняет массив результатов

Я играю с некоторыми регулярными выражениями и, глядя на некоторые из моих совпадений, мне стало интересно, почему функция exec дала столько же результатов, сколько и сама.

Я просто ищу небольшое разъяснение о внутренней работе операции, чтобы мне было легче чувствовать, почему регулярное выражение возвращает n результатов, а не просто принимать это.

Ex.

var invalidValues = new RegExp(
"\\bZIP or City & State$|" +
"\\bCity & State or ZIP$|" +
"\\bEm[ai][ia]l Address(\\s\\(Optional\\)|$)|" +
"^$", "gi"); 

invalidValues.exec("Zip or City & State");
//returns ["Zip or City & State", undefined]

В приведенном выше примере я понимаю, почему он соответствует "Zip или City & State", но я не знаю, почему создается второе совпадение с неопределенным значением.

Заранее спасибо.

1 ответ

Решение

Я не знаком с Proof General, но похоже, что exec возвращает только одно совпадение за раз. Результаты, которые вы видите:

  • "Zip or City & State" - полная подобранная подстрока.
  • undefined - подстрока, захваченная (\\s\\(Optional\\)|$) захват-группа. Или не захваченный, в этом случае, потому что та группа захвата находится в несоответствующей альтернативе.

Чтобы удалить последний, вы можете (предположительно) изменить ( в (?:, пометив его как группу без захвата.

Чтобы получить последующие совпадения, вам, вероятно, нужно позвонить exec многократно.

Другие вопросы по тегам