如何使用正则表达式识别javascript函数?

时间:2012-07-17 13:15:03

标签: javascript regex

我有JS代码。

我想找到每个函数的起始位置(通过'{'符号) 如何使用正则表达式找到它?

编辑:我知道不可能100%准确,如何通过正则表达式找到99%的功能? 有没有快速的选择?

2 个答案:

答案 0 :(得分:1)

JavaScript不是常规语言,无法使用正则表达式进行解析。如果要准确地解析JavaScript,则需要使用Plain Old Code™。

例如,此代码段会创建一个函数:

function()
{
    alert('foo');
}

此代码段调用函数和代码块:

foo.
function()
{
    alert('foo');
}

通过简单的正则表达式,这些细微差别是不可能的。

答案 1 :(得分:0)

如果将其制成字符串,则可以使用此解决方案。 我有一个类似的问题,我通过执行此功能来查找功能:

// String with some functions to search.
var myStr =
`
foo1(){
   var blabla = null;
}

foo2 () {
   var blabla = null;
}

foo3(params) {
   var blabla = null;
}

foo4(params1,params2) {
   var blabla = null;
}

foo5(params1: string, params2: int) {
   var blabla = null;
}
`;

// Function to find functions syntax.
function searchForFunctions(str) {
   var positionStartFunctions = [];
   var functionArr = str.match(/([a-zA-Z0-9]+)\s*\({1}([a-z0-9,:\s]*)\){1}\s*\{/g);

   for(var i=0; i<functionArr.length; i++) {
      var functionLength = functionArr[i].length;
      var functionIndexMatched = str.indexOf(functionArr[i]);
      var positionOfCurlyBracket = (functionLength + functionIndexMatched);

      positionStartFunctions.push(positionOfCurlyBracket);
   }

   return positionStartFunctions;
}

var listOfCurlyBracketsFunctions = searchForFunctions(myStr);
console.log(listOfCurlyBracketsFunctions);

该函数返回一个数组,该数组包含找到的每个函数的第一个大括号的索引。

我使此正则表达式与带有参数的每个函数结构或){之间的空格匹配。

已经很长时间了,但这也许会对其他人有所帮助。