这本身不是编程问题,更多的是关于ECMAScript / JavaScript规范的问题。
考虑以下JS。
let myexpr = /\*/; // Equivalent to `new RegExp("\\*")`
很好,与字符*
匹配的正则表达式。但是,如果我们尝试使用块注释
/*
let myexpr = /\*/; // Equivalent to `new RegExp("\\*")`
*/
[我们发现正则表达式中的转义字符与结束定界符一起导致块注释过早结束,并且解释器尝试执行*/
,这显然是非法的表达式。我们可以通过放弃RegExp
构造函数的正则表达式synax来明确解决此问题,但这可能需要更多的转义符并牺牲可读性。
我想我的问题是:为什么ES和/或JS规范允许序列*/
在正则表达式内而不是在字符串内终止注释?
注释中的所有文本都不是代码。跳过所有,直到找到*/
。由于文本中包含= /\*/;
,因此编译器将看到*/
并比您期望的更早终止注释块。
如果您注释掉一行,那么您将不会遇到问题:
// let myexpr = /\*/; // Equivalent to `new RegExp("\\*")`