Google Spreadsheet getValue([包含\ t的单元格])不会返回制表符

时间:2016-05-18 16:11:46

标签: javascript google-apps-script google-sheets google-spreadsheet-api

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

我正在使用代码

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

预期输出将是" b"但是我得到了一个\ tb"。

如何更改此行为?

1 个答案:

答案 0 :(得分:1)

对我来说,你的代码运行良好:

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

但是,我猜您的真实代码看起来不同,并进行了patternParts[2] == "\t"之类的比较,因为\t之后的字符is not the same as确实与隐形制表符不同。

所以,反之亦然:patternParts[2]确实包含\t,但你正在比较错误。在JavaScript中,您可以在使用双引号时使用转义序列,例如\n\t\uXXXX等。

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

编辑:根据您更新的问题:如果您想实际转换单元格中的所有\t(只有这两个字符,\和{{ 1}},没有什么特别的标签,然后你需要去替换它们:

t

如果你的替换部分中有与JavaScript兼容的转义序列,你也可以使用诸如patternParts[2] = patternParts[2].replace(/\\t/g, "\t"); 之类的技巧来使JS替换那里的所有转义序列。请注意,如果您的字符串中存在诸如迷失未转义的双引号等无效内容,则会引发异常,请注意:

JSON.parse('"' + theString + '"')