Извините, если я ошибаюсь, я сам не очень хорошо использую RegExes. Также не проверял, просто говорю, что приходит мне в голову. ;)
Тем не менее, вы рассматривали вопрос о том, чтобы сделать RegEx "неуклюжим", как показано ниже?
map(.*?,(.*?|function\([^)]\{.*?\}),.*?,.*?)
Возможно, вы захотите проверить правильный синтаксис для этого ... но AFAIK, делающий RegEx "несмешным", должен заставить его получать как можно больше для повторяющихся символов, которые совпадают. Это, конечно, также означает, что, например, параметры 1 или 3 могут содержать дополнительную запятую, если число параметров увеличивается до 5 или более, что в данном случае маловероятно.
Может быть, это обходной путь для проблемы вложенности? Может быть, я изменил это, и это на самом деле называется "жадный" ..? Прошло много времени с тех пор, как я работал с RegExes.
Помощь любого эксперта по этому вопросу очень ценится, поэтому я тоже могу чему-то научиться! ; D