使用正则表达式获取函数内容

时间:2015-05-05 14:46:50

标签: javascript regex

我正在尝试使用正则表达式从输入字符串中获取函数。

到目前为止,我设法使用以下正则表达式获取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]);
}

现在,我想进入返回的匹配,每个函数的全部内容,以便稍后我可以使用它(删除它,包装它...)

到目前为止,我还没有设法找到一个重复文本,我得到了这个:

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

但是当然,它会捕获第一个右括号},而不是每个函数末尾的那个。

知道如何获得每个函数的结束}吗?

1 个答案:

答案 0 :(得分:4)

  

关于如何获得每个函数的结束的任何想法?

使用正则表达式会非常困难。因为函数体可以包括任意数量的可能嵌套的支撑对。然后考虑在函数体中包含不匹配大括号的字符串。

要解析非regular language,你需要比正则表达式更强大的东西:该语言的解析器。

(某些正则表达式变体具有匹配配对字符的能力,但首先JavaScript的正则表达式引擎不是一个;其次是那些字符串...。)