如何从javascript文件中提取javascript函数

Tau*_*ren 6 javascript regex parsing

我需要从脚本文件中提取整个 javascript 函数。我知道函数的名称,但我不知道函数的内容可能是什么。这个函数可以嵌入到任意数量的闭包中。

我需要有两个输出值:

  1. 我在输入脚本中找到的命名函数的整个主体。
  2. 删除了找到的命名函数的完整输入脚本。

因此,假设我正在findMe此输入脚本中查找函数:

function() {
  function something(x,y) {
    if (x == true) {
      console.log ("Something says X is true");
      // The regex should not find this:
      console.log ("function findMe(z) { var a; }");
    }
  }
  function findMe(z) {
    if (z == true) {
      console.log ("Something says Z is true");
    }
  }
  findMe(true);
  something(false,"hello");
}();
Run Code Online (Sandbox Code Playgroud)

由此,我需要以下两个结果值:

  1. 提取的findMe脚本

    function findMe(z) {
      if (z == true) {
        console.log ("Something says Z is true");
      }
    }
    
    Run Code Online (Sandbox Code Playgroud)
  2. findMe删除了函数的输入脚本

    function() {
      function something(x,y) {
        if (x == true) {
          console.log ("Something says X is true");
          // The regex should not find this:
          console.log ("function findMe(z) { var a; }");
        }
      }
      findMe(true);
      something(false,"hello");
    }();
    
    Run Code Online (Sandbox Code Playgroud)

我正在处理的问题:

  1. 要查找的脚本正文中可以包含任何有效的 javascript 代码。查找此脚本的代码或正则表达式必须能够忽略字符串、多个嵌套块级别等中的值。

  2. 如果要查找的函数定义是在字符串内指定的,则应忽略它。

关于如何完成这样的事情的任何建议?

更新:

看起来正则表达式不是执行此操作的正确方法。我对可以帮助我实现这一目标的解析器的指针持开放态度。我在看Jison,但很想听听其他任何事情。

Hyp*_*eus 1

我几乎担心正则表达式无法完成这项工作。我认为这与尝试使用正则表达式解析 XML 或 HTML 是一样的,这个话题已经在这个论坛上引起了各种宗教辩论。

编辑:如果这与尝试解析 XML 不同,请纠正我。