-6

我有 JS 代码。

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

编辑:我知道不可能 100% 准确,我怎样才能通过正则表达式找到 99% 的函数?有没有快速的替代方案?

4

2 回答 2

1

JavaScript 不是正则语言,不能使用正则表达式进行解析。如果您想准确解析 JavaScript,则需要使用 Plain Old Code™。

例如,这个片段创建了一个函数:

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

而这段代码调用了一个函数和一个代码块:

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

这些细微差别是不可能用简单的正则表达式来识别的。

于 2012-07-17T13:18:30.837 回答
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);

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

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

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

于 2020-05-18T00:00:01.440 回答