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.

Original source

Related problems