Damaskus
@Damaskus

Регулярочка для парсера списка javascript функций

Имеется кусок javascript кода вида:

function funname (p1, p2, p3)
{

}

function funname2 (p1, p2, p3)
{

}

и т.д.

Нужно выделить отдельно имя функции, параметры и тело.
Причем нужно учесть, что в теле тоже могут быть функции в явном виде, либо замыкания, т.е. javascript во всех своих прелестях.
Вариант с подсчетом скобок не предлагать. :-)
  • Вопрос задан
  • 2589 просмотров
Пригласить эксперта
Ответы на вопрос 3
Shedal
@Shedal
Вот неплохой пост по теме:
blog.stevenlevithan.com/archives/regex-recursion

Но помните, что иногда фигурные скобки могут встречаться и в литералах.
Думаю, что единственным стопроцентно правильным решением является применение парсера, а не регексов. Но в простых случаях вполне может прокатить способ из статьи.
Ответ написан
taliban
@taliban
php программист
Выделяйте
function — будет всегда
funcName — может не быть (?)
funcParams — их возьмите одним куском и разбирайте потом
Ответ написан
@egorinsk
Функции можно определить и по-другому:

var name = function (a1, a2, a3) {};
this.name = function (a1, a2, a3) {};
var klass = {
method1: function (a1, a2, a3) {};
}
function createFunction() {
return function (a1, a2, a3) {};
}

Так что тупой парсер на регулярках не поможет. Пишите умный, с учетом контекста. Лень писать? Расковыряйте jsLint, он там преобразует текст на яваскрипте в AST. Также, видел где-то библиотеку на PHP для токенизации яваскрипта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы