繁体   English   中英

正则表达式替换不替换(Google Apps脚本)

[英]regex replace not replacing (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);

没有运气。 这是我正在运行的(很长)数据字符串的随机样本:

语音,传入(###)###-####,(###)###-####,``德克萨斯州达拉斯'',2014/12 / 12,06:26 PM,电话,语音邮件,00:00:27,$ 0.000,-,,,传入,(###)###-#### ,, ### ,,“达拉斯,TX”,12 / 12 / 2014,06:26 PM,电话,语音邮件,00:00

谁能看到我没看到的关于为什么它不起作用的信息? (或者对更好的方法有任何想法吗?)

replace()方法返回一个新字符串,该字符串具有部分或全部模式匹配项,并由替换项替换。

str.replace不会更改字符串,其中as返回带有替换的新字符串。 因此,您可能需要编写类似

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和空格一起打印回该块:

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(/,( [AZ]{2})/, ' $1'); document.write(s) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2025 STACKOOM.COM