删除某些其他字符之间出现的某些字符

时间:2018-05-17 14:55:58

标签: google-apps-script google-sheets

我正在尝试删除Google电子表格中的所有电子邮件行,其中(i)连字符( - )或句号(。)和(ii)@符号之间有两个或更少的字符。电子邮件的格式通常为firstname.surname@email.com,因此需要删除姓氏为两个或更少字符的电子邮件。这就是我到目前为止所做的:

function removeRowsWithTwoOrLessChars() {
 var sheet = SpreadsheetApp.getActiveSheet();
 var rows = sheet.getDataRange();
 var numRows = rows.getNumRows();
 var values = rows.getValues();
 var rowsDeleted = 0;

 var colIndex = 0; 
 for(var i = 1; i < values.length; ++i) {


    var charBefore = String(values[i][colIndex]).indexOf("@");
  if(charBefore < 3) {
   sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
   rowsDeleted++; 
  } 

 var charAfter = String(values[i][colIndex]).indexOf(".");
  if(charAfter < 3) {
   sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
   rowsDeleted++; 
  } 
 }
}; 

问题在于,这并不区分在第一个和第一个姓氏之间发生的第一个完全停止,以及在电子邮件中其他地方发生的第二个(或更多个)完全停止。

感谢。

1 个答案:

答案 0 :(得分:2)

  

麻烦的是,这并没有区分第一个   在第一个和第二个之间发生的完全停止   (或更多)电子邮件中其他地方发生的全停。

一种解决方案是使用indexOf()match()替换您的多项测试,如下所示:

var bad_address = values[i][colIndex].match(/[\.\-][^@]{1,2}@/)

if( bad_address ){
    # ...
}

match()尝试使用regular expression在字符串中查找模式。

上面使用的正则表达式分解如下:

/         -- start the regular expression
[\.\-]    -- match a single . or -
[^@]{1,2} -- match any character except for @, once or twice
@         -- match a single @ character
/         -- end the regular expression

由于该模式仅匹配电子邮件中.之前的一个或两个字符的-@,因此您不必担心在其他地方匹配它们地址在电子邮件地址中。

此外,i已经是一个整数,因此您不需要parseInt()

总而言之,你得到:

function removeRowsWithTwoOrLessChars() {
    var sheet = SpreadsheetApp.getActiveSheet();
    var rows = sheet.getDataRange();
    var numRows = rows.getNumRows();
    var values = rows.getValues();
    var rowsDeleted = 0;

    var colIndex = 0; 
    for(var i = 1; i < values.length; ++i) {
        var bad_address = values[i][colIndex].match(/[\.\-][^@]{1,2}@/);

        if( bad_address ){
            sheet.deleteRow(i + 1 - rowsDeleted);
            rowsDeleted++; 
        } 
    }
};

希望这有帮助!快乐的编码!