我正在为Brackets定制一个大纲插件,它使用正则表达式来识别当前打开的文件的轮廓。
使用regex101.com我创建了以下正则表达式(使用外观来确定该行以七个空格开头并以'SECTION'结尾。):
(?<=^ )([A-Za-z\-0-9]*)(?= SECTION\.[ ]*$)
根据regex101.com,没关系,但是当通过jshint / jslint验证时,它表明它无效。当我测试它时,它不起作用(我怀疑JSHint / JSLint是正确的。)
以下是一些cobol代码示例,我希望获得2000-GET-EXPECTED-BY-DATE和2020-GET-DUE-DATE。
...
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.
...
所以我的问题是:
答案 0 :(得分:1)
这适用于我找到带有“SECTION”的行:
^[ ]{7}(.*)[ ]SECTION\.$
DEMO: http://regex101.com/r/zC1xY6/2
如果您只想要部分名称:^[ ]{7}\d+\-(.*)[ ]SECTION\.$
答案 1 :(得分:0)
事实证明,我用过的东西确实有效,有两条评论:
然而,我发现(通过regex101.com上的实验)如果我将其更改为
^ (.*)(?= SECTION\.[ ]*$)
然后它没有超时问题。似乎如果我使用^[ ]{7}
作为前缀,或者我使用([A-Za-z0-9-]*)
作为匹配名称的捕获组,则它非常慢。
与(.*)
相比,主要问题似乎是([A-Za-z0-9-]*)
的效果,后者慢得多。
我可以使用regex101.com上的外观:(?<=^ )(.*)(?= SECTION\.[ ]*$)
,但是它在JSLint / JSHint中出错了。所以我会避免使用它。
我在括号大纲程序的一个分支中测试了第一个^ (.*)(?= SECTION\.[ ]*$)
并且它有效! : - )