Это будет соответствовать любой строке вплоть до первого некоманда «,». Это то, что вы хотите?
/^([^"]|"[^"]*")*?(,)/
Если вы хотите всех (и в качестве контр-примера для парня, который сказал, что это невозможно), вы можете написать:
/(,)(?=(?:[^"]|"[^"]*")*$)/
, который будет соответствовать всем им. Таким образом,
'test, a "comma,", bob, ",sam,",here'.gsub(/(,)(?=(?:[^"]|"[^"]*")*$)/,';')
заменяет все запятые не внутри кавычек с точкой с запятой и выдает:
'test; a "comma,"; bob; ",sam,";here'
Если вам нужно, чтобы он работал через разрывы строк просто добавьте флаг m (многострочный).
При работе с Eclipse я использую egit только для фактической фиксации. Всё остальное я делаю просто через командную строку. Командная строка в git (или любой другой VCS) гораздо более совершенна, а программное обеспечение было создано с учётом использования командной строки, поэтому просто естественно, что вы можете получить доступ к каждой функции через командную строку.
Все остальное использует командную строку только в фоновом режиме и пытается эмулировать другой интерфейс, родной для основного приложения (здесь: Eclipse). Но таким образом вы никогда не сможете достичь той же мощности, что и при использовании оригинальных инструментов.
Однако я думаю, что когда egit получит большее развитие, он может стать хорошим способом работы с git; подобно тому, как плагин subversion для Eclipse хорошо работает с большинством функций. Но в моей ситуации я не использую Eclipse для всего, и использование командной строки в таком случае намного проще, чем попытки привыкнуть к нескольким различным плагинам и командной строки.