Regex to pick characters outside of pair of quotes
regex
Solution
This will match any string up to and including the first non-quoted ",". Is that what you are wanting?
/^([^"]|"[^"]*")*?(,)/
If you want all of them (and as a counter-example to the guy who said it wasn't possible) you could write:
/(,)(?=(?:[^"]|"[^"]*")*$)/
which will match all of them. Thus
'test, a "comma,", bob, ",sam,",here'.gsub(/(,)(?=(?:[^"]|"[^"]*")*$)/,';')
replaces all the commas not inside quotes with semicolons, and produces:
'test; a "comma,"; bob; ",sam,";here'
If you need it to work across line breaks just add the m (multiline) flag.
Problem
I would like to find a regex that will pick out all commas that fall outside quote sets. For example: ``` 'foo' => 'bar', 'foofoo' => 'bar,bar' ``` This would pick out the single comma on line 1, after `'bar',` I don't really care about single vs double quotes. Has anyone got any thoughts? I feel like this should be possible with readaheads, but my regex fu is too weak.