Написание парсера для кода JavaScript - PullRequest
1 голос
/ 29 марта 2012

Я хочу извлечь код JavaScript и выяснить, есть ли какие-либо создания динамических тегов, например document.createElement('script'); Я пытался сделать это с помощью регулярных выражений, но использование регулярных выражений ограничивает меня в получении только некоторых форматов, поэтому я подумал о написании JavaScriptсинтаксический анализатор, который извлекает все ключевые слова, строки и функции из кода JavaScript.

Ответы [ 3 ]

2 голосов
/ 29 марта 2012

Как правило, нет способа узнать, будет ли когда-либо выполняться данная строка кода, вам нужно будет решить проблему остановки .Если вы ограничите свой анализ только обнаружением случаев вызова функции, вы не добьетесь большого прогресса.Наивные методы все равно будут легко обмануть, если вы просто сопоставите регулярное выражение для document.createElement, вы не сможете сопоставить что-то столь же простое, как document["create" + "Element"].В общем, вам нужно не только разобрать код, но и оценить его, чтобы обойти это.И чтобы быть уверенным, что вы сможете оценить код, который вам снова понадобится для решения проблемы остановки.

0 голосов
/ 29 марта 2012

Ну, первое правило - никогда не использовать регулярные выражения для таких больших вещей, как этот, или DOM, или ....Вы должны разобрать его по токенам.Хорошей новостью является то, что вам не нужно писать свои собственные.Есть несколько парсеров JS to JS.

С ними может быть немного сложно работать.Но лучше с ними работать.Есть другие проекты, которые используют их, такие как буррито или код хирурга .Таким образом, вы можете взглянуть на исходный код и посмотреть, как они его используют.

Но есть и плохие новости, которые люди все еще могут перехитрить другими людьми, не говоря уже о парсерах и коде, который они пишут.По крайней мере, вам нужно оценить код с некоторыми переменными времени выполнения и посмотреть, пытается ли он получить доступ к DOM или нет.

0 голосов
/ 29 марта 2012

Может быть, вам стоит попробовать Буррито

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...