Вы можете использовать:
var str = "foo \"b a \\\" r\" new y 'l o l' foo lol; var x = new 'fo \\' o' ";
var result = str.replace(/(function|new|return|var)?\s+(?=(?:[^\\"']|\\.)*(?:(?:"(?:[^\\"]|\\.)*"|'(?:[^\\']|\\.)*'))*(?:[^\\"']|\\.)*$)/gm,
function($0, $1) { return $1 ? $0 : ''; });
См. http://jsfiddle.net/qCeC4/
Часть Lookahead в форме Perl /x
:
s/
\s+
(?=
(?:[^\\"']|\\.)*
(?:
(?:
"(?:[^\\"]|\\.)*"
|
'(?:[^\\']|\\.)*'
)
)*
(?:[^\\"']|\\.)*$
)
//xmg;
Примечание: Как я уже говорил, это не очень хороший способ для анализа JS, и он будет разбит на комментарии, цитирование регулярных выражений и кто знает что еще.
Примечание 2: Забыл добавить, что это работает только для "действительного" цитирования, все цитаты должны быть закрыты.