Почему.replace() не работает с большой сгенерированной строкой из escodege.generate()?
Я пытаюсь сгенерировать некоторый код с помощью функции escodegen .generate(), которая выдает мне строку.
К сожалению, он не удаляет полностью точки с запятой (только в блоках кода), что мне и нужно, чтобы избавиться от них самостоятельно. Поэтому я использую .replace()
функции, однако точки с запятой не удаляются по некоторым причинам.
Вот что у меня сейчас есть:
generatedCode = escodegen.generate(esprima.parseModule(code), escodegenOptions)
const cleanGeneratedCode = generatedFile.replace(';', '')
console.log('cleanGeneratedCode ', cleanGeneratedCode) // string stays the exact same.
Я что-то делаю неправильно или что-то упускаю?
1 ответ
Согласно MDN, если вы предоставляете подстроку вместо регулярного выражения
Он обрабатывается как дословная строка и не интерпретируется как регулярное выражение. Только первое вхождение будет заменено.
Таким образом, выходные данные, вероятно, не совпадают с сгенерированным кодом, но первая точка с запятой была удалена. Чтобы исправить это, просто используйте регулярное выражение с флагом "global" (g
). Пример:
const cleanGenereatedCode = escodegen.generate(esprima.parseModule(code), escodegenOptions).replace(/;/g, '');
console.log('Clean generated code: ', cleanGeneratedCode);