Как 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
многократно.