Sto cercando di abbinare qualsiasi istanza di testo in un elenco delimitato da virgole. Per questo, la seguente espressione regolare funziona alla grande:Elementi corrispondenti in un elenco delimitato da virgole che non sono circondati da virgolette singole o doppie
/[^,]+/g
Il problema è che sto ignorando tutte le virgole che sono contenute all'interno di virgolette singole o doppie e non sono sicuro di come estendere il selettore precedente per consentirmi di farlo.
Ecco una stringa di esempio:
abcd, efgh, ij"k,l", mnop, 'q,rs't
Sono voler né corrispondere i cinque porzioni di testo o partita quattro virgole rilevanti (posso prelevare i dati utilizzando split()
invece di match()
):
abcd
efgh
ij"k,l"
mnop
'q,rs't
Oppure:
abcd, efgh, ij"k,l", mnop, 'q,rs't
^ ^ ^ ^
Come posso fare questo?
Tre domande pertinenti esistono, ma nessuno di loro soddisfare sia '
e "
in JavaScript:
- Regex for splitting a string using space when not surrounded by single or double quotes - soluzione Java, non sembra lavorare in JavaScript.
- A regex to match a comma that isn't surrounded by quotes - corrisponde solo su
"
- Alternative to regex: match all instances not inside quotes - partite Solo su
"
@ WiktorStribiżew fallisce quando uno spazio si trova accanto a una virgola tra virgolette (https://regex101.com/r/cW5hM0/2). –
@ WiktorStribiżew che si tratti di qualcosa di diverso dalle virgolette come una corrispondenza diversa, indipendentemente da una virgola: https://regex101.com/r/cW5hM0/4 (notare il carattere 'k' in quello). –
([^,] + ". *" [^,]) + | ([^,]? '. *' [^,]) + | ([^,] +)/G, questo dovrebbe funzionare e acquisire i gruppi che vuoi – SamyQc