用于匹配整个JavaScript函数定义的正则表达式?

时间:2012-07-14 00:11:47

标签: ruby regex

我正在尝试扫描一个JavaScript文档,该文档在其中定义了许多函数,并从文档中删除了一个函数。我希望我能在这里做一个简单的正则表达式技巧。

示例:

一些JavaScript文档:

function wanted_foo(bar) {
  ...
  ...
}
function unwanted_foo(bar) {
  ...
  inner_foo {
     ...
     ...
  }
}
function wanted_foo(bar) {
  ...
  ...
  inner_foo {
     ...
     ...
  }
}

这里显而易见的问题是我需要匹配“function unwanted_foo(bar) { ... }”形式的东西,除了我只需要匹配函数的最后一个大括号,而不是下一个大括号另一个功能。有一个简单的正则表达方式吗?

2 个答案:

答案 0 :(得分:1)

正常的正则表达式不能这样做,因为它们不能保持先前匹配的大括号的计数,因此无法找到最后一个,但是似乎许多实现具有超出正常正则表达式的功能,而Ruby是其中之一那些案件。

野兔是关于这一点的几个参考,虽然它可能不是你所说的简单。

  1. Matching braces in ruby with a character in front
  2. Backreferences

答案 1 :(得分:0)

一个“技巧”是将计数器与正则表达式一起使用。

  • 将您的计数器初始化为0
  • 匹配/^\s*function\s+\w+\(.*\)\s*\{形式的内容,当您找到此模式时,请记住该位置。
  • 当您匹配该模式时,请递增计数器
  • 现在分别与{}匹配,根据您找到的内容递增或递减您的计数器。
  • 继续这样做直到你的计数器再次为0,然后你应该找到一个函数

希望这对你有用吗?