Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

355
Views
Javascript/RegEx: divide una cadena por comas pero ignora las comas entre comillas dobles

Sé que hay preguntas similares disponibles, pero no pude encontrar este caso.

CASO 1: 'a,b,c,d,e'

SALIDA: ["a", "b", "c", "d", "e"]

CASO 2: 'a,b,"c,d", e'

SALIDA: ["a", "b", "c,d", "e"]

CASO 3: 'a,,"c,d", e'

SALIDA: ["a", "", "c,d", "e"]

RegEx que probé: (".*?"|[^",]+)(?=\s*,|\s*$)

Enlace RegEx: https://regex101.com/r/xImG4i/1

Esta expresión regular funciona bien con CASE1 y CASE2 pero está fallando para CASE3. En cambio, funciona para

'a, ,"c,d", e' , dando salida como ["a", " ", "c,d", "e"]

que también está bien, pero también debe funcionar para CASE3.

¡Gracias por adelantado!

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Puede tomar caracteres de espacio en blanco opcionales entre 2 comas si se admite una búsqueda posterior.

 "[^"]*"|[^\s,'"]+(?:\s+[^\s,'"]+)*|(?<=,)\s*(?=,)

Demostración de expresiones regulares

 const regex = /"[^"]*"|[^\s,'"]+(?:\s+[^\s,'"]+)*|(?<=,)\s*(?=,)/g; [ `'a,b,c,d,e'`, `'a,b,"c,d", e'`, `'a,,"c,d", e'`, ` xz a,, b, c, "d, e, f", g, h`, `'a, ,"c,d", e'`, ].forEach(s => console.log(s.match(regex)) )

Si no desea las comillas dobles, puede usar un grupo de captura con matchAll y buscar el grupo en la devolución de llamada.

 const regex = /"([^"]*)"|[^\s,'"]+(?:\s+[^\s,'"]+)*|(?<=,)\s*(?=,)/g; [ `'a,b,c,d,e'`, `'a,b,"c,d", e'`, `'a,,"c,d", e'`, ` xz a,, b, c, "d, e, f", g, h`, `'a, ,"c,d", e'`, ].forEach(s => console.log(Array.from(s.matchAll(regex), m => m[1] ? m[1] : m[0])) )

about 4 years ago · Santiago Trujillo Report

0

Una solución alternativa que usa una expresión regular para dividir en lugar de hacer coincidir:

 /,\s*(?=(?:(?:[^"]*"){2})*[^"]*$)/

Esta expresión regular se dividirá en comas seguidas de espacios opcionales si están fuera de las comillas dobles utilizando una búsqueda anticipada para asegurarse de que haya un número par de comillas después de la coma+espacio.

Demostración RegEx

Ejemplo de código:

 const re = /,\s*(?=(?:(?:[^"]*"){2})*[^"]*$)/; [ `a,b,"c,d", e`, `a,,"c,d", e`, ` xz a,, b, c, "d, e, f", g, h`, `a, ,"c,d", e`, ].forEach(s => { tok = s.split(re); tok.forEach((e, i) => tok[i] = e.replace(/^"|"$/g, '')) console.log(s, '::', tok); })

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!