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