Estoy tratando de extraer varias cadenas usando diferentes patrones de una cadena larga. Lo he hecho con éxito usando diferentes consultas Regex, pero creo que esto no es muy eficiente. Aquí hay un ejemplo de la cadena de entrada:
const input = ....Número de estudiantes: 5...[Nuevo]Descanso a la 1:45 p.m.\nLos estudiantes involucrados son: John, Joseph, Maria\nAlmuerzo a las 2:00 p.m....Actividades restantes: salto de longitud, barajar..
Hay tres prefijos que se utilizan para extraer los datos después:
const prefix1 = Students involved are:
const prefix2 = Activities remaining:
const prefix3 = Number of students:
El único patrón es una nueva línea después de cada una de las tres cadenas anteriores. Ejemplo: Students involved are: John, Joseph, Maria\n
He usado la siguiente expresión regular para lograr esto:
const students = input.match(new RegExp(prefix1 + "(.*)"));
const activities = input.match(new RegExp(prefix2 + "(.*)"));
const numOfStudents = input.match(new RegExp(prefix3 + "(.*)"));
¿Hay una manera mejor y más eficiente de lograr lo anterior donde tengo que iterar a través de la cadena larga solo una vez?
Puede combinar las tres expresiones regulares en una, así: (?<=Number of students: )(?<number>[^\n]+).*?(?<=Students involved are: )(?<students>[^\n]+).*?(?<=Activities remaining: )(?<activities>[^\n]+)/gms
Luego, al usar grupos de captura, puede acceder a los tres valores que desee.
let s = `const input = ....Number of students: 5... at 1:45 pm Students involved are: John, Joseph, Maria Lunch at 2:00 pm...Activities remaining: long jump, shuffle..` let pattern = /(?<=Number of students: )(?<number>[^\n]+).*?(?<=Students involved are: )(?<students>[^\n]+).*?(?<=Activities remaining: )(?<activities>[^\n]+)/gms let m = pattern.exec(s) console.log(m.groups.students) console.log(m.groups.number) console.log(m.groups.activities)
Dado que no hay un patrón que no sea una nueva línea después de cada una de las líneas mencionadas, esto coincidirá con cualquier cosa hasta la nueva línea, por lo que deberá limpiar los valores coincidentes.