soy nuevo en las expresiones regulares y quiero crear una expresión que encuentre el siguiente patrón:
tengo la cadena:
"'Hello world',dude, 'Somethings, never, turn and go', bye"Quiero una expresión regular que dé este resultado:
['Hello world',dude,'Somethings, never, turn and go',bye]Básicamente, dividir la cadena en coma pero mantener las frases con comillas que tienen coma como un todo.
Tengo esta expresión regular:
let s = "'Hello world',dude, 'Somethings, never, turn and go', bye"; let arr = s.split(/(?<=')\s*,\s*|\s*,\s*(?=')/g); console.log(arr) Si agrego esta cadena "'Hello world',dude, Somethings, never, turn and go, bye" da este resultado ["'Hello world'", 'dude, Somethings, never, turn and go, bye'] que Está Mal. No divide los otros valores separados por comas. ¿Cómo arreglo eso?
Puede usar dividir con un grupo de captura para mantener los valores divididos para '...' y usar una alternancia para dividir entre caracteres , espacio en blanco opcionales.
Como dividir puede dar elementos vacíos en la matriz resultante, puede eliminarlos con filter(Boolean);
También haciendo coincidir comillas simples escapadas:
('[^'\\]*(?:\\.[^'\\]*)*')|\s*,\s*Vea una demostración de expresiones regulares .
let s = "'Hello world',dude, 'Somethings, never, turn and go', bye"; let arr = s.split(/('[^'\\]*(?:\\.[^'\\]*)*')|\s*,\s*/g).filter(Boolean); console.log(arr)He visto tu pregunta anterior . Coincidentemente, mostraba comas justo después o antes de la comilla simple. De ahí la respuesta "incorrecta" allá atrás. En este caso, tal vez busque comillas simples balanceadas más adelante:
let s = "'Hello world',dude, Somethings, never, turn and go, bye"; let arr = s.split(/\s*,(?=(?:[^']*'[^']*')*[^']*$)\s*/); console.log(arr)Vea una demostración en línea.