Эффективное извлечение нескольких строк из длинной строки в Javascript

Я пытаюсь извлечь несколько строк, используя разные шаблоны, из одной длинной строки. Я сделал это успешно, используя разные запросы Regex, но я чувствую, что это не очень эффективно. Вот пример входной строки:

const input = ....Количество учеников: 5...[Новое]Перерыв в 13:45\nУчаствующие студенты: Джон, Джозеф, Мария\nОбед в 14:00...Оставшиеся занятия: прыжки в длину, перетасовать..

Есть три префикса, которые используются для извлечения данных после него:
const prefix1 = Students involved are:
const prefix2 = Activities remaining:
const prefix3 = Number of students:

Единственным шаблоном является новая строка после каждой из трех вышеперечисленных строк. Пример: Students involved are: John, Joseph, Maria\n

Для этого я использовал следующее регулярное выражение:

const students = input.match(new RegExp(prefix1 + "(.*)"));
const activities = input.match(new RegExp(prefix2 + "(.*)"));
const numOfStudents = input.match(new RegExp(prefix3 + "(.*)"));

Есть ли лучший и более эффективный способ выполнить вышеизложенное, когда мне нужно перебирать длинную строку только один раз?

1 ответ

Вы можете объединить все три регулярных выражения в одно, например: (?<=Number of students: )(?<number>[^\n]+).*?(?<=Students involved are: )(?<students>[^\n]+).*?(?<=Activities remaining: )(?<activities>[^\n]+)/gms

Затем, используя группы захвата, вы можете получить доступ ко всем трем нужным вам значениям.

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

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