Javascript Google电子表格getValue([cell containing\t])不返回制表器
我在谷歌电子表格中有一个单元格,其中包含文本“s/*│ */\t/g” 我正在使用代码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+)/;
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”将是所需的输出:)