Google 电子表格 getValue([包含 \t 的单元格]) 没有 return 制表符

Google Spreadsheet getValue([cell containing \t]) does not return a tabulator

我在包含文本 "s/ *│ */\t/g" 的 google 电子表格中有一个单元格。

我正在使用代码

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;
}

预期的输出是 "a b" 但我得到 "a\tb"。

如何改变这种行为?

对我来说你的代码工作正常:

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

但是我猜你的真实代码看起来不一样,并且做了一个像 patternParts[2] == "\t" 的比较,因为字符 \t 确实不同于 is not the same as.[=29= 之后的不可见制表符]

所以,事情是相反的:patternParts[2] 确实包含 \t 但你比较的不正确。在JavaScript中,使用双引号时可以使用\n\t\uXXXX等转义序列

因此,如果您想将 patternParts[2]\t 进行比较,请使用单引号 (patternParts[2] == '\t') 或转义反斜杠 (patternParts[2] == "\t")。

编辑: 根据您更新的问题:如果您想实际转换单元格中的所有 \ts(这只是那两个字符,\t,没什么特别的)到选项卡,然后你需要去替换它们:

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

如果你的替换部分有JavaScript兼容的转义序列,你也可以使用JSON.parse('"' + theString + '"')这样的技巧让JS替换那里的所有转义序列。请注意,如果您的字符串中存在无效的内容(例如未转义的双引号),这将引发异常,因此请注意:

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