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

226
Vistas
Dividir líneas en blanco basadas en cadenas y crear objetos basados en separadores

Estoy tratando de crear un analizador muy rudimentario que tome una cadena de varias líneas y la convierta en una matriz que contenga objetos. La cadena se formatearía así:

 title: This is a title description: Shorter text in one line image: https://www.example.com title: This is another title : with colon description: Longer text that potentially could span over several new lines, even three or more image: https://www.example.com title: This is another title, where the blank lines above are two description: Another description image: https://www.example.com

El objetivo es convertir esto en una matriz en la que cada sección separada por una o más líneas vacías sea un objeto que contenga pares clave/valor con los dos puntos como separador entre la clave y el valor, y una nueva línea como separador en el medio. pares clave/valor individuales. Entonces, la entrada anterior debería dar como resultado la siguiente salida:

 [ { title: "This is a title", description: "Shorter text in one line", image: "https://www.example.com" }, { title: "This is another title : with colon", description: "Longer text that potentially could span over several new lines, even three or more", image: "https://www.example.com" }, { title: "This is another title, where the blank lines above are two", description: "Another description", image: "https://www.example.com" } ]

Empecé con este CodePen , pero como puede ver, el código actualmente tiene algunos problemas que deben resolverse antes de que esté completo.

  1. Si se utilizan dos puntos en el valor, no deben dividirse. De alguna manera necesito hacer la división por la primera aparición de dos puntos y luego ignorar los dos puntos adicionales en el valor. Esto actualmente resulta en lo siguiente:
 // Input: // title: This is another title : with colon // image: https://www.example.com { image: " https", title: " This is another title " }
  1. Algunas líneas pueden contener un valor que abarca varias líneas. Los saltos de línea en el valor deben concatenarse en una sola línea y no deben tratarse como un separador para un nuevo par clave/valor. Esto actualmente resulta en lo siguiente:
 // Input: // description: Longer text that potentially // could span over several new lines, // even three or more { could span over several new lines,: undefined, description: " Longer text that potentially", even three or more: undefined }

Agradecería mucho cualquier ayuda sobre cómo abordar esto dado el código que tengo hasta ahora. Cualquier sugerencia sobre cómo optimizar el código para que sea más eficiente en el rendimiento también es muy bienvenida.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Como respuesta parcial, lo siguiente manejará los múltiples puntos y comas en una línea:

 var input = `title: This is a title description: Shorter text in one line image: https://www.example.com title: This is another title : with colon description: Longer text that potentially could span over several new lines, even three or more image: https://www.example.com title: This is another title, where the blank lines above are two description: Another description image: https://www.example.com`; var finalArray = []; var first = input.split(/\n\s*\n/); console.log("Array with sections split:", first); first.forEach(function (section) { var result = section.split("\n").reduce(function (o, pair) { pair = pair.split(":"); return (o[pair.shift()] = pair.join(':')), o; }, {}); console.log(result); finalArray.push(result); }); console.log("Array of sections as objects:", finalArray);

Esto todavía no maneja valores de varias líneas, pero el problema es que en su esquema no hay forma de determinar cuándo una nueva línea significa el comienzo de una nueva propiedad y cuándo es solo la continuación de un valor. Ya descartó usar la separación entre dos puntos y comas, por lo que ahora no tiene forma de resolver su segundo problema.

Aconsejaría usar un carácter especial que no permita en el cuerpo del texto principal para indicar el final de un par clave-valor y dividirlo en función de eso.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Hay una regla muy simple si trabajas con texto, siempre ten en cuenta las expresiones regulares.

Pruebe este enfoque:

 const data = `title: This is a title description: Shorter text in one line image: https://www.example.com title: This is another title : with colon description: Longer text that potentially could span over several new lines, even three or more image: https://www.example.com title: This is another title, where the blank lines above are two description: Another description image: https://www.example.com`; const bloks = data.split(/\n\s*\n/); result = bloks.map((blok) => { const title = blok.match(/(?<=title:)([\S\s]*\n?)(?=description:)/gm).join(' ').trim(); const description = blok.match(/(?<=description:)([\S\s]*\n?)(?=image:)/gm).join(' ').replaceAll('\n', ' ').trim(); const image = blok.match(/(?<=image:)([\S\s]*\n?)(?=)/gm).join(' ').trim(); return { title, description, image }; }) console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza 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