1

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

例子:

一些 JavaScript 文档:

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

这里明显的问题是我需要匹配“ function unwanted_foo(bar) { ... }”形式的东西,除了我只需要匹配到函数的最后一个花括号,而不需要匹配另一个函数的下一个花括号。有没有一种简单的正则表达式方法可以做到这一点?

4

2 回答 2

1

普通的正则表达式无法做到这一点,因为它们无法计算先前匹配的大括号,因此无法找到最后一个,但似乎许多实现具有超出普通正则表达式的能力,而 Ruby 就是其中之一。

Hare 提供了一些关于此的参考,尽管它可能不是您所说的简单。

  1. 将ruby中的大括号与前面的字符匹配
  2. 反向引用
于 2012-07-14T00:29:42.047 回答
1

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

  • 将您的计数器初始化为 0
  • 匹配一些形式/^\s*function\s+\w+\(.*\)\s*\{,当你找到这个模式时,记住位置。
  • 当您匹配该模式时,增加您的计数器
  • 现在根据您找到的内容单独匹配{并增加或减少您的计数器。}
  • 继续这样做,直到你的计数器再次为 0,那么你应该找到了一个函数

希望这对你有用吗?

于 2012-07-14T08:38:34.110 回答