为什么.replace()对escodege.generate()中的大型生成的字符串不起作用?

问题描述:

我试图用escodegen的.generate() function生成一些代码,它给了我一个字符串。为什么.replace()对escodege.generate()中的大型生成的字符串不起作用?

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

这是我目前有:

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

上午我做错了什么或可能失去了一些东西?

+0

很可能是删除了一个分号。不要使用子字符串,请尝试'generatedFile.replace(/;/g,'')'。 – c1moore

+0

谢谢!这正是我所需要的(应该知道的更好......)。将其作为答案,以便我可以将其标记为问题的解决方案:) – theJuls

+0

使用RegExp替换所有:generatedFile.replace(new RegExp(';','g'),''); – mscdeveloper

MDN,如果你提供一个字符串,而不是一个正则表达式

它被视为原义字符串,而不是解释为正则表达式。只有第一次出现将被替换。

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

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