Грамматика JavaScript - это не зависящая от контекста грамматика (я думаю, что она LL (1) -парсируемая). Его нельзя анализировать с помощью регулярных выражений.
В теории формальных языков в теории вычислимости есть результат, известный как лемма накачки, которая доказывает, что вы не можете анализировать произвольные контекстно-свободные грамматикис регулярным выражением.
Суть проблемы заключается в следующем: вы не можете просто искать строку //
, потому что она может содержаться внутри другого действительного кода, например, строки.Вы не можете просто искать //
внутри двух кавычек, потому что тогда вы получите ложные срабатывания, такие как alert('no!') // can't do it
, где текст ) // can
технически содержится между двумя '
знаками.Вместо этого вам нужно будет определить, где начинаются и заканчиваются строки.Хуже того, один тип строк может быть вложен в другой тип строк, а строки (даже полуоткрытые строки) могут быть вложены в комментарии!
Не существует простого общего решения - синтаксические элементы JavaScript, такие как строки, скобки, скобки и т. д. могут быть вложены в произвольно много уровней.Единственный способ точно определить, где начинается и заканчивается любой синтаксический элемент, - это правильно проанализировать все синтаксические элементы, с которыми вы можете столкнуться на этом пути.
Правильный ответ - использовать реальный синтаксический анализатор..