Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

227
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda