为什么.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.
上午我做错了什么或可能失去了一些东西?
答
按MDN,如果你提供一个字符串,而不是一个正则表达式
它被视为原义字符串,而不是解释为正则表达式。只有第一次出现将被替换。
因此,输出可能是不准确的一样生成的代码,而是第一个分号已被删除。要解决这个问题,只需使用带有“全局”标志(g
)的正则表达式。举个例子:
const cleanGenereatedCode = escodegen.generate(esprima.parseModule(code), escodegenOptions).replace(/;/g, '');
console.log('Clean generated code: ', cleanGeneratedCode);
很可能是删除了一个分号。不要使用子字符串,请尝试'generatedFile.replace(/;/g,'')'。 – c1moore
谢谢!这正是我所需要的(应该知道的更好......)。将其作为答案,以便我可以将其标记为问题的解决方案:) – theJuls
使用RegExp替换所有:generatedFile.replace(new RegExp(';','g'),''); – mscdeveloper