我正在尝试使用正则表达式从输入字符串中获取函数。
到目前为止,我设法使用以下正则表达式获取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)*\}
但是当然,它会捕获第一个右括号}
,而不是每个函数末尾的那个。
知道如何获得每个函数的结束}
吗?
答案 0 :(得分:4)
关于如何获得每个函数的结束的任何想法?
使用正则表达式会非常困难。因为函数体可以包括任意数量的可能嵌套的支撑对。然后考虑在函数体中包含不匹配大括号的字符串。
要解析非regular language,你需要比正则表达式更强大的东西:该语言的解析器。
(某些正则表达式变体具有匹配配对字符的能力,但首先JavaScript的正则表达式引擎不是一个;其次是那些字符串...。)