使用javascript从CSV中删除隐形回车

时间:2018-01-04 12:21:12

标签: javascript regex csv google-apps-script

我尝试使用以下代码解析Google Apps脚本(Google表格)中的CSV:

var file = DriveApp.getFileById('xx');
var blobasstr = file.getBlob().getDataAsString();
var csvData = Utilities.parseCsv(blobasstr);

一切正常,除了我的CSV中单元格中有隐形回车这一事实,这导致在单元格中间创建额外的行。 这些回车是由于源数据包含具有两个地址线(并且中间的回车)的单元的结果。当我在记事本中打开CSV时,我必须键入两次光标以超越这一点,这加强了我的想法,那里有一个隐藏的回车。

我可以在我的blobasstr上使用正则表达式来删除这些不可见的回车符,但当然会在每行的末尾保留通常的回车符吗?

编辑:感谢您参考之前的问题。使用正则表达式:

blobasstr.replace(/(?=["'])(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]\r\n(?:\\[\s\S][^'\\]\r\n)*')/g, '\\r\\n');

我确实能够移除隐藏的'返回这是一个很好的开始。问题是我现在最终在具有不可见返回的单元格中的文本 \ r \ n (而不是单元格的原始内容,这可能是由替换参数引起的&# 39; \ r \ n'是否有替代方案可以保留单元格的原始内容(当然没有隐藏的回车符?)非常感谢!

非常感谢帮助!

克里斯

2 个答案:

答案 0 :(得分:0)

notepad期望dos行结尾\r\n并且不处理单行\n的unix行结尾,我可以用\n的简单文件重现行为,光标必须输入两次到提前。

似乎Utilities.parseCsv无法处理多行单元格,因为无法指定可选的封闭字符,如"

答案 1 :(得分:0)

这最终对我有用了:

var blobasstr = blobasstr2.replace(/(?=["'])(?:"[^"\]*(?:\[\s\S][^"\]*)*"|'[^'\]\r\n(?:\[\s\S][^'\]\r\n)*')/g, function(match) { return match.replace(/\n/g,"")} );