为什么 .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);
我正在尝试使用 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);