• Jobs
  • About Us
  • professionals
    • Home
    • Jobs
    • Courses and challenges
    • Questions
    • Teachers
  • business
    • Home
    • Post vacancy
    • Our process
    • Pricing
    • Assessments
    • Payroll
    • Blog
    • Sales
    • Salary Calculator

0

116
Views
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?

almost 3 years ago · Santiago Gelvez
3 answers
Answer question

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))

almost 3 years ago · Santiago Gelvez Report

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(/^\[|\]$/, "");
almost 3 years ago · Santiago Gelvez Report

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);

almost 3 years ago · Santiago Gelvez Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Our process Sales
Legal
Terms and conditions Privacy policy
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recommend me some offers
I have an error