我正在撰写一个谷歌应用程序脚本,该脚本从gmail附件中的CSV文件中提取内容。我需要将csv数据拆分成几个数组(每行都是它自己的数组)。我已经把这一切都搞定了。
我的问题是:CSV中的一个值是" City,St"格式。因此,当我使用string.split(',')分割数组时,我最终会得到一个额外的"列。"我想解决这个问题的方法是备份并删除初始字符串中的逗号。这是我的代码的相关部分:
var attachments = msgs[i][j].getAttachments();
for (var k = 0; k < attachments.length; k++) {
var attachmentData = attachments[k].getDataAsString();
var regex = new RegExp('\,\s(?:[A-Z]{2}\")', 'gi');
attachmentData.replace(regex,' ');
...
所以我试图做的只是找到一个逗号,后跟一个空格,然后是两个字母,然后是一个引号。我想用空格替换逗号。我也试过了
var regex = new RegExp('(\,\s)([A-Z]{2}\")', 'gi');
attachmentData.replace(regex,$2);
没有运气。这是一个(非常长的)数据字符串的随机样本,我在其上运行:
Voice,Incoming,(###)### - ####,(###)### - #### ,,,,&#34; Dallas,TX&#34;,12 / 12 / 2014,06:26 PM,电话,语音信箱,00:00:27,$ 0.000, - ,, ,Incoming,(###)### - #### ,, ### ,,,&#34; Dallas,TX&#34;,12/12 / 2014,06:26 PM,电话,语音信箱,00:00
任何人都可以看到我没有看到为什么这不起作用? (或者有更好的方法来做到这一点?)
答案 0 :(得分:2)
replace()方法返回一个包含部分或全部匹配项的新字符串 被替换者取代的模式。
str.replace
不会更改字符串,其中as返回带有replace的新字符串。因此,您可能希望编写类似
var regex = new RegExp('(,\\s)([A-Z]{2}")', 'gi');
var replacedData = attachmentData.replace(regex,'$2');
注意强>
您可以将第一个捕获组删除为
var regex = new RegExp(',\\s([A-Z]{2}")', 'gi');
var replacedData = attachmentData.replace(regex,'$1');
答案 1 :(得分:0)
您可以使用具有此条件的正则表达式,然后使用$1
和空格打印块:
s = s.replace(/,( [A-Z]{2}")/, ' $1');
^^ ^ ^^^
comma ^^^^^^^^^ print back replacing comma with space
|
catch the group of space + two letters + "
现场直播:
var s = 'Voice,Incoming,(###) ###-####,(###) ###-####,,,,"Dallas, TX",12/12/2014,06:26 PM,Phone Call,Voicemail,00:00:27,$0.000,-,, ,Incoming,(###) ###-####,,###,,,"Dallas, TX",12/12/2014,06:26 PM,Phone Call,Voicemail,00:00';
s = s.replace(/,( [A-Z]{2})/, ' $1');
document.write(s)
&#13;