Tengo una cadena como la siguiente
19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit
¿Cómo puedo escribir una expresión regular que me dé estas dos cadenas separadas?
19990101 - John DoeLorem ipsum dolor sit amet
19990102 - Elton Johnconsectetur adipiscing elit
La expresión regular que escribí funciona hasta esto
/\d+ -/gm
Pero no sé cómo puedo incluir los alfabetos allí también.
Puedes usar
const text = '19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit'; console.log(text.match(/\d+\s+-[A-Za-z0-9\s]*[A-Za-z]/g)) console.log(text.split(/(?!^)\s+(?=\d+\s+-)/)) El text.match(/\d+\s+-[A-Za-z0-9\s]*[A-Za-z]/g) extrae los caracteres alfanuméricos/espacios en blanco después del patrón \d+\s+- . Detalles :
\d+ - uno o más dígitos\s+ - uno o más espacios en blanco- - un guion[A-Za-z0-9\s]* - cero o más caracteres alfanuméricos o espacios en blanco[A-Za-z] - una letra El text.split(/(?!^)\s+(?=\d+\s+-)/) divide la cadena con uno o más espacios en blanco antes de uno o más dígitos + uno o más espacios en blanco + - :
(?!^) - no al comienzo de la cadena\s+ - uno o más espacios en blanco(?=\d+\s+-) - una búsqueda anticipada positiva que coincide con una ubicación seguida inmediatamente por uno o más dígitos + uno o más espacios en blanco + - .Para el caso de uso del OP, una split basada en expresiones regulares como con ... str.split(/(?<=\w)\s+(?=\d)/) ... ya debería hacerlo.
La expresión regular usa lookarounds , aquí tratando de hacer coincidir cualquier espacio en blanco (secuencia)/ \s+ que está encabezado/ (?<= ... ) por una palabra/ \w y es seguido/ (?= ... ) por un dígito / \d carácter.
console.log( '19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit 19990101 - John DoeLorem ipsum dolor sit amet 19990102 - Elton Johnconsectetur adipiscing elit' .split(/(?<=\w)\s+(?=\d)/) );