正则表达式删除多行注释

6 javascript regex

我试图使用这个正则表达式(JS):

/\/\*(.*)\*\//g
Run Code Online (Sandbox Code Playgroud)

取代

/*
sdandsads
*/
Run Code Online (Sandbox Code Playgroud)

没有.

但它不起作用!为什么?O_O

Gab*_*oli 13

dot捕获除换行符之外的所有内容..(如果dotall为false)

所以要么使用dotall(如其他答案/评论中所述,这在javascript中不受支持,但我会留在这里供参考)

/\/\*(.*)\*\//gs
Run Code Online (Sandbox Code Playgroud)

或者\s在表达式中添加空格字符

/\/\*((\s|.)*?)\*\//g
Run Code Online (Sandbox Code Playgroud)

艾伦在他的评论中提到,从答案我给因此改为使用以下..一个糟糕的表现(其转化为一切空白,一切非空白,所以一切..)

/\/\*([\s\S]*?)\*\//g
Run Code Online (Sandbox Code Playgroud)


Max*_*keh 6

两个问题:

  1. 在 javascript 中,没有 dotall 修饰符。您必须使用 hack 来允许匹配换行符,例如使用[^].
  2. 您正在使用贪婪匹配。如果你的输入中有多个评论,它们之间的所有内容都会被吃掉。

解决方案:

/\/\*[^]*?\*\//g
Run Code Online (Sandbox Code Playgroud)

例子:

> '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '')
qqq
Run Code Online (Sandbox Code Playgroud)