为什么 .replace() 不能处理从 escodege.generate() 生成的大字符串?

Why isn't .replace() working on a large generated string from escodege.generate()?

我正在尝试使用 escodegen 的 .generate() function 生成一些代码,它会给我一个字符串。

不幸的是,它没有完全删除分号(仅在代码块上),这是我需要它自己删除它们的。所以我正在使用 .replace() 函数,但是由于某些原因没有删除分号。

这是我目前拥有的:

  generatedCode = escodegen.generate(esprima.parseModule(code), escodegenOptions)
  const cleanGeneratedCode = generatedFile.replace(';', '')
  console.log('cleanGeneratedCode ', cleanGeneratedCode) // string stays the exact same.

我是不是做错了什么或者遗漏了什么?

根据 MDN,如果您提供子字符串而不是正则表达式

It is treated as a verbatim string and is not interpreted as a regular expression. Only the first occurrence will be replaced.

因此,输出可能与生成的代码不完全相同,而是第一个分号已被删除。要解决此问题,只需使用带有 "global" 标志 (g) 的正则表达式。一个例子:

const cleanGenereatedCode = escodegen.generate(esprima.parseModule(code), escodegenOptions).replace(/;/g, '');
console.log('Clean generated code: ', cleanGeneratedCode);