Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

160
Vistas
Cadena dividida JS en búsqueda anticipada positiva, evite casos superpuestos

Tengo un conjunto de datos que incluye notas fechadas, todas concatenadas, como en el siguiente ejemplo. Suponga que la fecha siempre viene al principio de su nota. Me gustaría dividirlos en notas individuales. He usado una anticipación positiva para poder mantener el delimitador (la fecha).

Esto es lo que estoy haciendo:

 const notes = "[3/28- A note. 3/25- Another note. 3/24- More text. 10/19- further notes. [10/18- Some more text.]" const pattern = /(?=\d{1,2}\/\d{1,2}[- ]+)/g console.log(notes.split(pattern))

y el resultado es

 [ '[', '3/28- A note. ', '3/25- Another note. ', '3/24- More text. ', '1', '0/19- further notes. [', '1', '0/18- Some more text.]' ]

El patrón \d{1,2} coincide con 10/19 y 0/19 , por lo que se divide antes de ambos. En cambio, me gustaría tener

 [ '[', '3/28- A note. ', '3/25- Another note. ', '3/24- More text. ', '10/19- further notes. [', '10/18- Some more text.]' ]

(Puedo manejar los corchetes extraños más tarde).

¿Cómo puedo lograr esta división con expresiones regulares o cualquier otra técnica?

about 4 years ago · Santiago Gelvez
3 Respuestas
Responde la pregunta

0

Para obtener el resultado deseado, puede anteponer un límite de palabra en la búsqueda anticipada y puede omitir el signo más al final del patrón.

 (?=\b\d{1,2}\/\d{1,2}[- ])

Demostración de expresiones regulares

 const notes = "[3/28- A note. 3/25- Another note. 3/24- More text. 10/19- further notes. [10/18- Some more text.]" const pattern = /(?=\b\d{1,2}\/\d{1,2}[- ])/g console.log(notes.split(pattern))

about 4 years ago · Santiago Gelvez Denunciar

0

Evitaría split() aquí y en su lugar usaría match() :

 var notes = "[3/28- A note. 3/25- Another note. 3/24- More text. 10/19- further notes. [10/18- Some more text.]"; var matches = notes.match(/\[?\d+\/\d+\s*-\s*.*?\.\]?/g); console.log(matches);

Puede realizar una limpieza adicional de los corchetes iniciales/posteriores utilizando expresiones regulares, por ejemplo

 var input = "[10/18- Some more text.]"; var output = input.replace(/^\[|\]$/, "");
about 4 years ago · Santiago Gelvez Denunciar

0

Pruebe .replaceAll() y esta expresión regular:

 /(\[?\d{1,2}\/\d{1,2}\-.+?)/ // Replacement "\n$1"

Figura I - Regex

Segmento Descripción
(\[? Comience el grupo de captura: haga coincidir el literal "[" cero o una vez
\d{1,2}\/ hacer coincidir un dígito una o dos veces y un literal "/"
\d{1,2}\- hacer coincidir un dígito una o dos veces y un literal "-"
.+?) hacer coincidir cualquier cosa con cualquier cantidad de veces "perezosamente" - finalizar el grupo de captura

Figura II - Reemplazo

Segmento Descripción
\n Nueva línea
$1 Todo coincidió en el grupo de captura ( ... )

 const notes = "[3/28- A note. 3/25- Another note 3/24- More text. 10/19- further notes [10/18- Some more text.]"; const rgx = new RegExp(/(\[?\d{1,2}\/\d{1,2}\-.+?)/, 'g'); let result = notes.replaceAll(rgx, "\n$1"); console.log(result);

about 4 years ago · Santiago Gelvez Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda