3

我正在为 Brackets 定制一个大纲插件,该插件使用正则表达式来识别当前打开文件的大纲。

使用 regex101.com 我创建了以下正则表达式(使用环视来确定该行以七个空格开头并以 '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

1

这对我来说可以找到带有“SECTION”的行:

^[ ]{7}(.*)[ ]SECTION\.$

演示: http ://regex101.com/r/zC1xY6/2

如果您只想要部分名称:^[ ]{7}\d+\-(.*)[ ]SECTION\.$

于 2014-08-06T06:28:26.493 回答
0

好吧,事实证明我使用的东西确实有效,有两条评论:

  • 通过 regex101.com 使用时需要添加全局和多行修饰符,
  • 它的执行速度非常慢,以至于 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 回答