Google电子表格getValue([cell containing ])不返回制表符

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

本文关键字:返回 制表符 containing cell 电子表格 getValue Google      更新时间:2023-09-26

我在谷歌电子表格中有一个单元格,其中包含文本"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确实与is not the same as之后的不可见制表符不同。

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

因此,如果要比较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
}