【问题标题】:How to identify javascript functions using regex?如何使用正则表达式识别 javascript 函数?
【发布时间】:2012-07-17 13:15:02
【问题描述】:

我有 JS 代码。

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

编辑:我知道不可能 100% 准确,如何通过正则表达式找到 99% 的函数? 有什么快速的替代品吗?

【问题讨论】:

  • 您不应该使用正则表达式解析 Javascript 代码,因为 Javascript 不是常规语言,{ 符号在不同的上下文中可能意味着不同的东西。
  • function name (/*complicated stuff*/){function (/*complicated stuff*/){ 语法。匹配这些,获取他们的位置,并在简单的情况下感到高兴。
  • @Nish, var whoops = "function FOO";
  • 像您这样的人是我们遇到此安全和黑客问题的原因。解析时的语言类不匹配导致解析“树”中的可枚举不可见区域,双向切割(对于 JS 解释器或“解析器”不可见)。在那里,你可以隐藏各种东西。精心构造的 Hidden Stuff(TM) 会在你身上爆炸,粉碎你的筹码,偷走你的妻子,并且(也许)扎根你的盒子。但请继续! ;-)
  • @nobody, hackers 是我们遇到安全和黑客问题的原因。不要责怪受害者。话虽如此,重要的是要教导人们不要成为受害者。

标签: javascript regex


【解决方案1】:

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

比如这个sn-p创建一个函数:

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

而这个 sn-p 调用一个函数和一个代码块:

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

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

【解决方案2】:

如果你把它变成一个字符串,你可以使用这个解决方案。 我有一个类似的问题,我做了这个函数来查找函数:

// 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);

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

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

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

【讨论】:

  • 感谢您在代码旁边添加说明。
猜你喜欢
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-18
  • 2023-03-30
  • 2011-06-18
  • 1970-01-01
相关资源
最近更新 更多