2017-09-23 17 views
0

我正在尝试编写RegEx来解析单行注释的分组。RegEx JavaScript:匹配连续的单行注释

鉴于此输入:

//line 1 
//line 2 
//line 3 

//line 4 
//line 5 
//line 6 

我希望有两场比赛:1-3行和4-6。用我目前的RegEx (^\/\/[\S\s]+$)我有一个匹配:第1-6行,虽然之间有一条空行。

的问题是,\s匹配任何空白字符,所以被包括在空行。但在同一时间,线路中断是正则表达式的一部分 - 但是当符合//开始而已,所以我坚持。

我怎样才能避免匹配空行正则表达式?

+0

@RomanPerekhrest因为我想了解它 – Sven

+0

如果无法与正则表达式来完成,那么它也knowlege :)我只是好奇,因为最初我认为应该可以 – Sven

+0

OK,祝你好运... – RomanPerekhrest

回答

2

你可以试试这个:

/(^\/\/[^\n]+$\n)+/gm 

看到这里https://regex101.com/r/CrR9WU/1

这首先选择在每一行,然后什么是换行,最后的开始两个/(在换行符)换行符本身。有两场比赛:1到3行和行4〜6。如果你也让“空注释行像//那么这将做过多:

/(^\/\/[^\n]*$\n)+/gm 

编辑:
我知道,这是一个有点晚了,但卡西米尔乐于助人的评论让我对这个修改的方案:

/(?:^\/\/.*\n?)+/gm 

它解决了最终\n的问题,没有捕获组,是简单(它是相当类似简的解决方案。 - )...)

+1

如果您将锚点“^”放在组中,则您可以变得更加简单,您不需要'$'锚点。 ''*(点)*除''n''之外与['\ n]'匹配。如果一行注释在字符串末尾没有换行符,或者注释行在斜线后没有字符,那么您的模式将失败:'/^\/\/.*(?:\n \/\ /。*)*/gm' –

+0

@Cimimir:谢谢你指出!好的备用正则表达式! – cars10m

1

这是修饰符是:

(?:^\/{2}.+\n?)+ 

随着MULTILINE模式,见a demo on regex101.com


碎裂开来,这样说:

(?:  # a non-capturing group 
    ^ # start of the line 
    \/{2} # // 
    .+ # anything else in that line 
    \n? # a newline, eventually but greedy 
)+  # repeat the group