正则表达式提取函数体

Ray*_*nos 1 javascript regex

我有这个正则表达式

var bodyRegExp = /function[\\s]+[(].+[)][\\s]+{(.+)}/;

bodyRegExp.exec("module.exports = function () { /* any content */ }");
Run Code Online (Sandbox Code Playgroud)

它不起作用.它为什么坏了?

它的意思是将函数语句的主体从源代码中拉出来.

编辑:

我是傻瓜.试图用正则表达式解析javascript是愚蠢的.

gil*_*ly3 5

不要逃避你的反斜杠.逃避你的花括号.您的字符集方括号表达式是不必要的.请改用:

var bodyRegExp = /function\s+\(.*\)\s+\{(.+)\}/;
Run Code Online (Sandbox Code Playgroud)

尽管如此,这不是一个非常强大的表达式 - 它不适用于多行函数,并且当你的函数有多个parens或花括号时会产生意想不到的结果 - 这似乎极有可能.但它至少应该解决你遇到的问题.

编辑:如果您总是在处理包含没有前面或后面语句的函数的字符串,那么解决方案非常简单.只需在第一个开口花括号之后和最后一个结束花括号之前获取所有内容.

var fnBody = fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}"));
Run Code Online (Sandbox Code Playgroud)

如果您尝试从包含多个函数的字符串中提取单个函数,则需要编写完整的解析算法来执行此操作.或者,如果这样做是安全的,您可以通过执行JavaScript并获取函数定义字符串var fn = module.exports.toString(),然后将上述代码应用于该字符串.