代码之家  ›  专栏  ›  技术社区  ›  helcode srinivasan Elangovan

match()不处理数字字段

  •  1
  • helcode srinivasan Elangovan  · 技术社区  · 7 年前

    我试图通过使用正则表达式过滤电子邮件列中具有特定单词的行来执行操作。

    enter image description here

    问题是 match() 产生以下错误

    TypeError: Cannot find function match in object 1234. (line 25, file "Code")

    我的代码

        function smartDelete() {
        // smartDelete settings goes here, 
        var badDomains = ["bad\\.com", "red\\.com"];
    
        var emailColumnNumber = 2;
    
        var regExpModifiers = "i";
    
        // Gain access data in the sheet
        var sheet = SpreadsheetApp.getActiveSheet();
        var rows = sheet.getDataRange();
        var numRows = rows.getNumRows();
        var values = rows.getValues();
        var rowsDeleted = 0;
        var Action = false;
    
        // delete procedure
        for (var i = 0; i <= numRows - 1; i++) {
            var row = values[i];
            Action = false;
    
            // check bad domains
            for (var j = 0; j <= badDomains.length - 1; j++) {
                var myPattern = new RegExp(badDomains[j], regExpModifiers);
                var status = row[emailColumnNumber].match(myPattern);
                if (status) {
                    // match found, mark this row for delete
                    Action = true;
                    break;
                };
            };
    
            // execute delete.
            if (Action) {
                sheet.deleteRow((parseInt(i) + 1) - rowsDeleted);
                rowsDeleted++;
            };
        };
    }
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   helcode srinivasan Elangovan    7 年前

    match() 必须接收字符串,单元格 C4 产生 Number ,因此出现错误。

    换这条线,

    var status = row[emailColumnNumber].match(myPattern);

    在下面应该修复 TypeError

    注意到 .toString() 方法超前 .match()

    var status = row[emailColumnNumber].toString().match(myPattern);