Вам нужно регулярное выражение, которое может различать код и комментарии. В частности, поскольку последовательность //
может быть либо строкой, либо комментарием, вам просто нужно различать строки и комментарии.
Вот пример, который может сделать это:
/(?:([^\/"']+|\/\*(?:[^*]|\*+[^*\/])*\*+\/|"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')|\/\/.*)/
Использование этой функции в функции замены при замене совпавшей строки на совпадение первого подшаблона позволит удалить комментарии в стиле //
.
Некоторые объяснения:
[^/"']+
соответствует любому символу, который не является началом комментария (как //…
, так и /*…*/
) или строки
/\*(?:[^*]|\*+[^*/])*\*+/
соответствует стилю комментариев /* … */
"(?:[^"\\]|\\.)*"
соответствует строке в двойных кавычках
'(?:[^'\\]|\\.)*'
соответствует строке в одинарных кавычках
\/\/.*
наконец соответствует стилю комментариев //…
.
Поскольку первые три конструкции сгруппированы в группу захвата, соответствующая строка доступна, и ничего не изменяется при замене совпадающей строки на соответствие первого подшаблона. Только при совпадении комментария в стиле //…
совпадение первого подшаблона будет пустым и, следовательно, будет заменено пустой строкой.
Но учтите, что это может не сработать. Я не совсем уверен, работает ли он для любого ввода.