Почему.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);
Другие вопросы по тегам