2015-05-05 1 views
0

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

До сих пор мне удалось получить JavaScript kind of function declarations со следующим регулярным выражением:

/(\b(f|F)unction(.*?)\((.*?)\)\s*\{)/g 

Что при применении, как это будет возвращать меня вся декларация по первому индексу:

var re = /(\b(f|F)unction(.*?)\((.*?)\)\s*\{)/g; 

while ((m = re.exec(text)) !== null) { 
    //m[0] contains the function declaration 
    declarations.push(m[0]); 
} 

Теперь, Я хотел бы получить в возвращенном матче все содержимое каждой из функций, чтобы потом работать с ним (удалил, обернул его ...)

У меня нет маны Гед найти regext, чтобы сделать это, до сих пор, я получил это:

(\b(f|F)unction(.*?)\((.*?)\)\s*\{)(.*?|\n)*\} 

Но, конечно же, она ловит первый закрывающую скобку } вместо одного в конце каждой из функций.

Любая идея о том, как получить закрытие } каждой функции?

+1

Почему вы пытаетесь это сделать? Возможно, есть лучший способ достичь своей конечной цели? –

+0

проверить это http://stackoverflow.com/questions/13952870/regular-expression-to-get-parameter-list-from-function-definition –

+1

Это невозможно сделать с регулярным выражением, поскольку регулярные выражения не содержат возможности для подсчета, это то, что вам нужно, чтобы соответствовать скобкам. –

ответ

4

Любая идея о том, как получить закрытие} каждой функции?

Это будет очень сложно с регулярным выражением. Поскольку тело функции может включать любое число возможных вложенных пар привязок. А затем рассмотрим строки, содержащие непревзойденные фигурные скобки в теле функции.

Для анализа не regular language вам потребуется что-то более мощное, чем регулярные выражения: парсер для этого языка.

(Некоторые варианты регулярных выражений имеют некоторую способность соответствующих парных символов, но во-первых, механизм регулярных выражений в JavaScript не один, а во-вторых, то есть те строки ....)

+0

Согласитесь, но прерывание строки не так сложно избежать, с другой стороны, функция, содержащая регулярное выражение, не заключенное в строку, как в javascript ... –