Даже если вы проверите логические выражения, я мог бы сделать это:
(a && b && (function() { ruinYourShit(); return true; })())
Это показывает, что ваша проблема не решаема в общем случае.
Чтобы это работало в вашей ситуации, вы должны наложить жесткие ограничения на именование переменных, например, требовать, чтобы все переменные представляли собой одну букву алфавита, а затем использовать регулярное выражение, чтобы отбросить его, если что-то еще будет найдено. Кроме того, чтобы «соответствовать» булевому выражению, вам фактически нужно разработать грамматику для этого выражения. Вы пытаетесь проанализировать нерегулярный язык (javascript), и поэтому вы не можете написать регулярное выражение, которое могло бы соответствовать любому возможному логическому выражению произвольной сложности. По сути, проблема, которую вы пытаетесь решить, очень, очень сложная.
Если вы не ожидаете, что мир рухнет, если кто-то испортит ваше дерьмо, вы можете разработать достаточно хорошее решение , просто проверив ключевое слово function
и запретив любые блоки логического кода содержится в {
и }
.