N.O.Davis
N.O.Davis

Reputation: 513

Google Apps Script: RegExp g Modifier

I can't seem to get the "g modifier" in a RegExp to work in a Google script.

When I try to apply it, sometimes I get the error that "ReferenceError: "g" is not defined.". When I remove the /g both regExp.exec and input.match(regExp) work, but only for the first match. Other times, I'll get the /g to work, but it returns null, not even producing the first match. I had attempted a while loop, but I didn't want to slow down this process even more (I'll save optimizing this script for another post once I get it to work as intended).

The short version is, I'm trying to get ALL matches (email addresses) not just the first one. Where do I apply the /g? Should I use another method?

You can see (below) what I've been attempting below.

Any tips? I appreciate any help me understand this and anyone that can show me a better way to approach this. Thanks!

 if (colA != "" && colE != processed) {
        var html = UrlFetchApp.fetch(colA).getContentText();
       //Logger.log(html);

        var regExp = new RegExp("[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");
        var regExp2 = new RegExp("[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");
        var regExp3 = '[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]/g {2,4}';
        var regExp4 = '[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}/g';
        var extractTest = html.match(regExp3);
        //var extract = regExp.exec(html);
        Logger.log(extractTest);
    }

You can see the "bigger picture" of it all below.

    //TEST
var processed = "YES";

function test() {

  var ss = SpreadsheetApp.openById('1E4yUVIpwi00DzjfnXrZSgNFmVjOQbNWewxAiTBHRdD4');
  var sheet = ss.getSheetByName('Sheet5');

   var currentRow = 2;
   var currentColumn = 1;
   var numRows = sheet.getLastRow()-1;
   var numColumns = 5;

   var range = sheet.getRange(currentRow, currentColumn, numRows, numColumns);
   var values = range.getValues();
   //Logger.log(values);

  for (var i = 0; i < numRows; ++i) {
    var column = values[i];
    var colA = column[0];
    var colB = column[1];
    var colC = column[2];
    var colD = column[3];
    var colE = column[4];

     if (colA != "" && colE != processed) {
        var html = UrlFetchApp.fetch(colA).getContentText();
       //Logger.log(html);

        var regExp = new RegExp("[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");
        var regExp2 = new RegExp("[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}");
        var regExp3 = '[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]/g {2,4}';
        var regExp4 = '[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}/g';
        var extractTest = html.match(regExp3);
        //var extract = regExp.exec(html);
        Logger.log(extractTest);
    }
  }

    //var destRange = sheet.getRange(currentRow+i,2);
    //destRange.setValue(extract);
    //var destRange2 = sheet.getRange(currentRow+i,5);
    //destRange2.setValue(processed);
    SpreadsheetApp.flush();
  }

Upvotes: 1

Views: 981

Answers (1)

N.O.Davis
N.O.Davis

Reputation: 513

Using the solution provided by @I'-'I (see comments above): var re = /[A-z0-9._%+-]+@[A-z0-9.-]+\.[A-z]{2,4}/g;

Upvotes: 1

Related Questions