正则表达式替换不替换(谷歌应用程序脚本)

时间:2014-12-17 15:55:11

标签: javascript regex csv google-apps-script google-apps

我正在撰写一个谷歌应用程序脚本,该脚本从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

任何人都可以看到我没有看到为什么这不起作用? (或者有更好的方法来做到这一点?)

2 个答案:

答案 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 + "

现场直播:

&#13;
&#13;
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;
&#13;
&#13;