Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 正则表达式替换未替换(谷歌应用程序脚本)_Javascript_Regex_Csv_Google Apps Script_Google Apps - Fatal编程技术网

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

Javascript 正则表达式替换未替换(谷歌应用程序脚本),javascript,regex,csv,google-apps-script,google-apps,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 =

我正在写一个谷歌应用程序脚本,从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,' ');
...
没有运气。下面是我正在运行此操作的(很长)数据字符串的随机样本:

语音,传入,(###########################,,,,“德克萨斯州达拉斯”,2014年12月12日,06:26,电话,语音信箱,00:27,$0.000,, ,传入,(#################,德克萨斯州达拉斯市),2014年12月12日,下午6:26,电话,语音信箱,00:00

有人能看到我没有看到的东西吗?这为什么不起作用?(或者有没有更好的方法?)

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

s = s.replace(/,( [A-Z]{2}")/, ' $1');
               ^^         ^    ^^^
           comma ^^^^^^^^^     print back replacing comma with space
                   |
                   catch the group of space + two letters + "
现场观看:

<代码>var s>var s=语音,声音,来料,语音,来料,语音,来料,语音,语音,语音,语音,来料,,,(35周五周五周五周五周五周五周五\周五周五周五周五周五周五周五周五周五周五周五周五周五周五\周五周五周五周五周五周五周五周五周五周五\周五周五周五周五周五\\周五周五周五周五周五周五周五\\\周五周五周五周五周五周五周五\\\周五周五周五周五周五周五周五周五\\\\周五周五周五周五周五周五周五周五周五周五\\\\\\周五周五周五周五周五周五周五周五\\周五周五周五周五周五周五周五\\\\2014年12月12日,下午6:26,电话,语音信箱,00:00'; s=s.replace(/,([A-Z]{2})/,“$1”);
document.write::facepalm::当然它不会替换字符串。我猜在这个脚本中我已经在数组中工作了太多。谢谢你。如果我有代表编辑:“我正在获取引用错误:“$2”未定义。”当我将其插入脚本时。@mulliweht您应该将
$2
括在引号中。很抱歉输入错误:(@mulliweht you are welcome:)您甚至可以删除第一个caputure组。见答案中的注释。希望ti能帮助你,我喜欢只抓住下半场的想法。谢谢,不客气!如果你愿意,可以随意投票。
s = s.replace(/,( [A-Z]{2}")/, ' $1');
               ^^         ^    ^^^
           comma ^^^^^^^^^     print back replacing comma with space
                   |
                   catch the group of space + two letters + "