3

現在開いているファイルのアウトラインを識別するために正規表現を使用する、Brackets のアウトライン プラグインをカスタマイズしています。

regex101.com を使用して、次の正規表現を作成しました (ルックアラウンドを使用して、行が 7 つのスペースで始まり、「SECTION.」で終わることを確認します)。

(?<=^       )([A-Za-z\-0-9]*)(?= SECTION\.[ ]*$)

regex101.com によると問題ありませんが、jshint/jslint で検証すると無効であると表示されます。私がテストしたところ、うまくいきませんでした (JSHint/JSLint は正しいと思われます)。

以下は、2000-GET-EXPECTED-BY-DATE と 2020-GET-DUE-DATE を取得したい COBOL コードの例です。

          ...
      2000-GET-EXPECTED-BY-DATE SECTION.
          MOVE '2' TO W10-OPTION.

          ...

          ELSE                                                     
              MOVE 'Y' TO W10-NO-ERRORS                         
          END-IF.                                                  

      2017-EXIT.                                                   
          EXIT.                                                   
     /
      2020-GET-DUE-DATE SECTION.
      2020.

          MOVE 'N' TO W10-USER-INPUT-DUE-DATE-SW.
          MOVE '1' TO W10-OPTION.
          ...

だから私の質問は:

  • 正規表現は有効ですか?
  • 無効な場合、何が間違っていますか?
  • 各セクションの名前を見つけるには、正規表現をどのように記述すればよいですか?
4

2 に答える 2

0

さて、私が使用したものが実際に機能することがわかりました.2つのコメントがあります:

  • regex101.com 経由で使用する場合は、global および multiline 修飾子を追加する必要があります。
  • regex101.com が大規模なプログラムでタイムアウトするなど、実行が非常に遅くなります。

ただし、(regex101.comでの実験により)次のように変更すると、

^       (.*)(?= SECTION\.[ ]*$)

その後、タイムアウトの問題なしで動作します。^[ ]{7}名前を一致させるためにプレフィックスとして使用するか、([A-Za-z0-9-]*)キャプチャ グループとして使用すると、非常に遅くなるようです。

(.*)主な問題は、 と比較した場合の のパフォーマンスにあるよう([A-Za-z0-9-]*)です。後者ははるかに遅くなります。

regex101.com:(?<=^ )(.*)(?= SECTION\.[ ]*$)で後読みを使用できますが、JSLint/JSHint でエラーが発生します。なので使うのは避けます。

^ (.*)(?= SECTION\.[ ]*$)ブラケットアウトラインプログラムのフォークで最初のものをテストしましたが、動作します! :-)

于 2014-08-07T01:34:06.347 に答える