1

我正在尝试使用 escodegen 的.generate() 函数生成一些代码,该函数给了我一个字符串。

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

这是我目前拥有的:

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

我做错了什么或错过了什么?

4

1 回答 1

2

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

它被视为逐字字符串,不被解释为正则表达式。只有第一个匹配项将被替换。

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

const cleanGenereatedCode = escodegen.generate(esprima.parseModule(code), escodegenOptions).replace(/;/g, '');
console.log('Clean generated code: ', cleanGeneratedCode);
于 2017-10-21T20:29:30.860 回答