Javascript Google电子表格getValue([cell containing\t])不返回制表器

Javascript Google电子表格getValue([cell containing\t])不返回制表器,javascript,google-apps-script,google-sheets,google-spreadsheet-api,Javascript,Google Apps Script,Google Sheets,Google Spreadsheet Api,我在谷歌电子表格中有一个单元格,其中包含文本“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+)/;

我在谷歌电子表格中有一个单元格,其中包含文本“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;
}
预期输出为“a b”,但我得到“a\tb”


如何更改此行为?

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

[16-05-18 18:20:27:447 CEST] \t   is not the same as    
然而,我猜您的实际代码看起来不同,并且会进行类似于
patternParts[2]=“\t”
的比较,因为
\t
之后的字符确实不同于
之后的不可见制表器,而
不同

因此,情况正好相反:
patternParts[2]
确实包含
\t
,但您的比较不正确。在JavaScript中,当使用双引号时,可以使用转义序列,如
\n
\t
\uxxx

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

编辑:根据您更新的问题:如果您想将单元格中的所有
\t
转换为制表符(这只是这两个字符,
\
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
}

对不起,我表达错了,例子太少了。我编辑了代码并添加了预期输出和实际输出。为什么预期输出是
ab
?您得到的是
a\tb
,因为这正是单元格中写入的内容。将放入代码中的
“\t”
组成选项卡的基本是读取代码的解析器。从别处加载的字符串不会神奇地转换。如果要将字符串中的所有
\t
转换为制表符,则需要对其执行
。替换(/\\t/g,“\t”)
。然后,“a b”将是所需的输出:)