Javascript 正则表达式删除多行注释

Javascript 正则表达式删除多行注释,javascript,regex,Javascript,Regex,我正在尝试使用这个正则表达式(JS): 取代 /* sdandsads */ 一无所有 但它不起作用!为什么?o_o点捕捉除换行以外的所有内容。(如果dotall为false) 因此,要么使用dotall(如其他答案/注释中所述,javascript不支持此选项,但我将其保留在此处以供参考) 或者在表达式中添加空格字符\s Alan在他的评论中提到了我给出的答案中的一个糟糕表现,因此请使用以下内容。。(这意味着所有内容都是空白,所有内容都是非空白,所以所有内容都是…) 两个问题: 在java

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

取代

/*
sdandsads
*/
一无所有


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

点捕捉除换行以外的所有内容。(如果dotall为false

因此,要么使用dotall(如其他答案/注释中所述,javascript不支持此选项,但我将其保留在此处以供参考)

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

Alan在他的评论中提到了我给出的答案中的一个糟糕表现,因此请使用以下内容。。(这意味着所有内容都是空白,所有内容都是非空白,所以所有内容都是…)

两个问题:

  • 在javascript中,没有dotall修饰符。您必须使用hack来允许匹配换行符,例如使用
    [^]
  • 你在使用贪婪匹配。如果输入中有多个注释,它们之间的所有内容都将被吃掉
  • 解决方案:

    /\/\*[^]*?\*\//g
    
    例如:

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

    JavaScript中没有
    s
    (单行)模式,而且
    (\s|)
    会导致灾难性的回溯。在JS中匹配任何内容(包括换行符)的标准方法是
    [\S\S]
    @alan,是否有关于
    \S|的链接。
    回溯?埃里克·科里(Erik Corry)在这里解释得很好:关于灾难性回溯的更一般性的讨论,请参阅@IvanBlack,这肯定不是评论。编译器或解释器会抱怨语法错误。作为参考,ECMAScript 2022中添加了dotall支持。
    /\/\*((\s|.)*?)\*\//g
    
    /\/\*([\s\S]*?)\*\//g
    
    /\/\*[^]*?\*\//g
    
    > '/*abc\ncde*/qqq/*iop\n\njj*/'.replace(/\/\*[^]*?\*\//g, '')
    qqq