2017-10-21 6 views
1

Ich versuche, Code mit escodegen .generate() function zu generieren, die mir eine Zeichenfolge gibt.Warum funktioniert .replace() nicht an einer großen generierten Zeichenfolge von escodege.generate()?

Leider entfernt es nicht vollständig die Semikolons (nur auf Blöcken von Code), was ich brauche, um sie selbst loszuwerden. Also verwende ich die .replace() Funktion, aber die Semikolons werden aus irgendeinem Grund nicht entfernt.

Hier ist, was ich derzeit haben:

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

Bin ich etwas falsch zu machen oder vielleicht etwas fehlt?

+0

Wahrscheinlich wird ein einzelnes Semikolon entfernt. Anstatt eine Teilzeichenfolge zu verwenden, probiere 'generatedFile.replace (/;/g, '')'. – c1moore

+0

Danke! Das war genau das, was ich brauchte (hätte es besser wissen müssen ...). Setzen Sie das als eine Antwort, so dass ich es als die Auflösung für das Problem markieren kann :) – theJuls

+0

RegExp verwenden, um alle zu ersetzen: generatedFile.replace (new RegExp (';', 'g'), ''); – mscdeveloper

Antwort

2

Per MDN, wenn Sie einen Teil anstelle einen regex liefern

Es als wörtlichen Zeichenfolge behandelt wird und nicht als regulärer Ausdruck interpretiert. Nur das erste Vorkommen wird ersetzt.

Also, wahrscheinlich der Ausgang ist nicht genau der gleiche wie der Code generiert, sondern das erste Semikolon entfernt wurde. Um dies zu beheben, verwenden Sie einfach eine Regex mit dem Flag "global" (g). Ein Beispiel:

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