我在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"。
如何更改此行为?
答案 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 + '"')