【问题标题】:regex replace not replacing (google apps script)正则表达式替换不替换(谷歌应用脚​​本)
【发布时间】:2015-02-16 05:41:52
【问题描述】:

我正在编写一个 google 应用程序脚本,该脚本从 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);

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

语音,传入,(###) ###-####,(###) ###-####,,,,"达拉斯, TX",12/12/2014, 06:26 PM,电话,语音信箱,00:00:27,$0.000,-,, ,来电,(###) ###-####,,###,,,"达拉斯, TX",12/12/2014,06:26 PM,电话,语音信箱,00:00

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

【问题讨论】:

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


    【解决方案1】:

    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');
    

    【讨论】:

    • ::facepalm:: 当然它不会替换字符串。我猜我在这个脚本中一直在数组中工作太多了。感谢那。如果我有代表,我会投票。编辑:“我收到 ReferenceError:”$2" 未定义。”当我将它插入脚本时。
    • @mulliweht 你应该把$2 用引号括起来,抱歉打错了:(
    • @mulliweht 欢迎您 :) 您甚至可以删除第一个捕获组。请参阅答案中的注释。希望对你有帮助
    【解决方案2】:

    您可以在此条件下使用正则表达式,然后将带有$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)

    【讨论】:

    • 我喜欢只捕捉下半场的想法。谢谢。
    • 不客气!如果您愿意,请随时投票。
    猜你喜欢
    • 1970-01-01
    • 2021-08-16
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 1970-01-01
    相关资源
    最近更新 更多