шаблон
Ваш шаблон разделения имеет проверочное утверждение переменной длины, которое вызывает наложения:
Cristoforo Colombo Airport, Genoa, Italy (GOA) - Augsburg -
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Satisfies the assertion
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Also satisfies the assertion
О exec
Вы видели только один соответствие возвращается с exec
, потому что флаг /g
(global) не был указан; с включенным глобальным флагом, вызов его один раз вернет первое совпадение, но он вернет другой результат, если вы вызовете его снова:
const a = "Cristoforo Colombo Airport, Genoa, Italy (GOA) - Augsburg - Muehlhausen Airport, Munich, Germany (AGB)"
const reg = /(?<=,.*,.*) - /g
let match
while ((match = reg.exec(a)) !== null) {
console.log(`Found ${match[0]}. Next starts at ${reg.lastIndex}.`);
}
О split
Когда split()
вызывается с регулярным выражением, оно неявно копируется как выражение с global флаг включен; Затем он выполняет итерацию этих совпадений, как показано в приведенном выше фрагменте, и создает массив кусочков строк на основе этих результатов.
Альтернатива
Из того, что я могу сказать, все аэропорты имеют позывной между скобками в конце их имени; Таким образом, ваше утверждение с подтверждением может быть исправлено следующим образом:
const a = "Cristoforo Colombo Airport, Genoa, Italy (GOA) - Augsburg - Muehlhausen Airport, Munich, Germany (AGB)"
const b = "Augsburg - Muehlhausen Airport, Munich, Germany (AGB) - Strachowice Airport, Wroclaw, Poland (WRO)"
const reg = /(?<=\)) - /
console.log(a.split(reg))
console.log(b.split(reg))