我正在尝试删除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++;
}
}
};
问题在于,这并不区分在第一个和第一个姓氏之间发生的第一个完全停止,以及在电子邮件中其他地方发生的第二个(或更多个)完全停止。
感谢。
答案 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++;
}
}
};
希望这有帮助!快乐的编码!