-1

Ich habe eine Zelle in einer Google-Tabelle mit dem Text "s/* │ */\ t/g".Google Spreadsheet getValue ([Zelle mit t]) gibt keinen Tabulator zurück

Ich verwende den Code

function minimalExample(){ 
    var text = "a │ b" 

    var pattern = SpreadsheetApp.getActiveSheet().getRange('B3').getValue() // cell contains "s/ *│ */\t/g" 
    var regexSplitter = /s\/(.*)\/(.*)\/(\w+)/;  // pattern to split sed line into search/replace/modifier 
    var patternParts = pattern.match(regexSplitter); // list with search [1], replace [2], modifier [3] 

    text = text.replace(new RegExp(patternParts[1], patternParts[3]),patternParts[2]); 
    Logger.log(text); 

    return true; 
} 

Die beabsichtigte Ausgabe würde "a b" sein, aber ich erhalte "eine \ tb".

Wie kann ich dieses Verhalten ändern?

+0

Warum sollte die beabsichtigte Ausgabe 'a b' sein? Du bekommst 'a \ tb', weil * genau das ist, was in die Zelle * geschrieben wird. Die Dinge, die einen Tabulator aus einem "\ t" ergeben, den Sie in Ihren Code einfügen, ist im Grunde der Parser, der Ihren Code liest. Streicher, die von anderswo geladen werden, werden sich nicht magisch verwandeln. Wenn Sie alle '\ t' in der Zeichenfolge in Tabulatorzeichen umwandeln möchten, müssen Sie' .replace (/ \\ t/g, "\ t") 'darauf setzen. – CherryDT

+0

Dann wäre "a b" die _desired_ Ausgabe :) – Nico

Antwort

1

Für mich Ihr Code funktioniert gut:

[16-05-18 18:20:27:447 CEST] \t is not the same as  

aber ich denke, Ihre echten Code sieht anders aus und macht einen Vergleich wie patternParts[2] == "\t", weil die Charaktere \t tatsächlich anders sind als die unsichtbare Tabulator nach is not the same as. Die Sache ist umgekehrt: patternParts[2] enthält tatsächlich \t, aber Sie vergleichen es falsch. In JavaScript können Sie Escape-Sequenzen wie \n, \t, \uXXXX usw. verwenden, wenn Sie doublequotes verwenden.

Also, wenn Sie wollen patternParts[2] mit \t vergleichen, verwenden Sie entweder einfache Anführungszeichen (patternParts[2] == '\t') oder den Backslash (patternParts[2] == "\\t").

EDIT: Nach Ihrer aktualisierten Frage: Wenn Sie möchten, um tatsächlich alle \t s in der Zelle umwandeln (die nur diese beiden Zeichen ist, \ und t, nichts Besonderes) zu Tabs, dann müssten Sie gehen und ersetzen sie:

patternParts[2] = patternParts[2].replace(/\\t/g, "\t"); 

Wenn Sie JavaScript-kompatible Escape-Sequenzen in Ihrem ersetzen Teil, können Sie auch einen Trick wie JSON.parse('"' + theString + '"') nutzen könnten, um JS alle Escape-Sequenzen in dort zu machen ersetzen. Beachten Sie, dass dies eine Ausnahme auslöst, wenn ungültige Zeichen wie streunende Doppelzeichen in Ihrer Zeichenfolge enthalten sind. Achten Sie also darauf:

try { 
    patternParts[2] = JSON.parse('"' + patternParts[2] + '"'); 
} catch(e) { 
    // Invalid syntax! Handle the error here somehow 
} 
+0

Sorry, ich habe mich falsch ausgedrückt und das Beispiel war zu minimal. Ich habe den Code bearbeitet und die beabsichtigte vs. die tatsächliche Ausgabe hinzugefügt. – Nico

+0

Das ist großartig, vielen Dank !! – Nico

Verwandte Themen