利用正则表达式删除代码中的注释

利用正则表达式删除代码中的注释

背景:

​ 在实现某功能的过程中,为了方便看,频繁的copy其他模块的内容,导致代码中充满了没意义的注释,需要删除。

单行注释的处理

在一行代码中,//及之后的内容都是注释,直接匹配去掉即可。

本打算使用//.*,但是遇到如//hello everyone之类有空格的情况时,无法删除完整,所以采用另一种办法。

1
//[\S ]*

多行注释的处理

与单行的注释不同,多行注释/* */中可能存在换行符,.只能代表除换行符以外字符。

字符 含义
\s 匹配任何空白字符,等价于[\f\n\r\t\v]
\S 匹配任何非空白字符

利用[\s\S]即可表示任意的字符组合,[\s\S]*就是任意数量的任意字符组合。

但注意到一个问题,正则表达式匹配的过程中默认采用贪婪模式。而我们希望的是匹配到每一段注释,这里就需要使用非贪婪模式。在匹配优先量词后加上?即变成属于非贪婪模式的量词。

所以代码如下:

1
/\*[\s\S]*?\*/

当然,可以整合一下两种注释:

1
//[\S ]*| /\*[\s\S]*?\*/

这样就可以去掉不想要的注释啦~不过作为一个程序猿,多写注释还是一个比较好的习惯呢,这只是在特定情景下的需求啦~