您的问题的一部分是您的正则表达式的第一部分。您正在使用[\/* Useless CSS \*\/]
,一个字符类,这意味着该集合中的任何字符。换句话说,以下任何字符(删除重复字母后):/* UselCS
. 这绝对不是你的意图,但这就是它正在做的事情。下面的代码从模式中删除了字符类,使其/**** Useless CSS ****/
显式匹配。
第二个变化是(.|[\r\n])*?
变成[\s\S]*?
. 无需每次都针对两个选项进行正则表达式检查。如果是一组字符,只需将它们添加到同一个字符类中即可。[\s\S]
是一种表示任何字符(包括换行符)的方式。另一种方法(适用于 JavaScript,但没有很多其他正则表达式引擎)是使用[^]
.
第三个变化是更改\*\*\*\*
为\*{4}
。这不仅更短更容易理解,而且还提高了性能,因为正则表达式引擎不需要逐个标记\*
,然后\*
,然后\*
等。它被告知匹配*
四次,所以它一次性完成而不是4. 这意味着\*\*\*\*
需要四个步骤,而\*{4}
只需要一个。
您还可以附加\s*
到末尾以删除额外的空格。
\/\*{4} Useless CSS \*{4}\/[\s\S]*?\/\*{4} END Useless CSS \*{4}\/
var s = `/**** Useless CSS ****/
.my-class{
margin: 12px;
}
/* Several Lines after including other comments **/
/**** END Useless CSS ****/
.other {
padding: 12px;
}
/* Hello */`
var r = /\/\*{4} Useless CSS \*{4}\/[\s\S]*?\/\*{4} END Useless CSS \*{4}\//gi
console.log(s.replace(r, ''))