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

1 つの「トリック」は、正規表現と一緒にカウンターを使用することです。

  • カウンターを 0 に初期化する
  • フォームの何かを一致/^\s*function\s+\w+\(.*\)\s*\{させ、このパターンを見つけたら、位置を覚えておいてください。
  • そのパターンに一致したら、カウンターをインクリメントします
  • 見つけたものに応じて、カウンターを一致さ{せて}個別にインクリメントまたはデクリメントします。
  • カウンターが再び0になるまでこれを続けてください。そうすれば、関数が見つかるはずです

それがあなたに役立つことを願っていますか?

于 2012-07-14T08:38:34.110 に答える
1

通常の正規表現では、以前に一致した中かっこを数えることができず、最後のものを見つけることができないため、これを行うことはできませんが、多くの実装には通常の正規表現を超える機能があり、Ruby はそれらのケースの 1 つです。

Hare はそれに関するいくつかの参考文献ですが、単純とは言えないかもしれません.

  1. ruby の中かっこを前の文字と一致させる
  2. 後方参照
于 2012-07-14T00:29:42.047 に答える