【问题标题】:Conditional regex in Google Apps ScriptGoogle Apps 脚本中的条件正则表达式
【发布时间】:2018-03-02 12:54:36
【问题描述】:

我有一个 Google Apps 脚本 我需要提取 IP,问题是它们可能在同一行:

或分两行:

当 IP 在同一行时,一切正常:

    function regtest (){

      //In this cell I have gmail content 
      var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LOG").getRange("C364").getValue();

      var regex = new RegExp(/\- Destination ip address\(es\):(.*)/);
      var e = regex.exec(data);
      Logger.log(e);
    }

但我不知道如何在不同行中提取 IP...

有人可以帮我吗?

【问题讨论】:

  • 所以,这是一个以逗号分隔的 IP 列表,在某个字符串之后,对吧?此外,它可能跨越换行符?
  • 没错,就是用逗号隔开的IP列表。捕获组必须捕获数据,直到下一个向导 (-)

标签: javascript regex google-apps-script


【解决方案1】:

我针对- Destination ip address(es): 1.2.4.6, 2.2.4.6, 3.2.4.6,\n 4.2.4.6 字符串进行了测试:

似乎以下工作:

function regtest (){
  //In this cell I have gmail content 
  var data = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("LOG").getRange("C364").getValue();
  var regex = /- Destination ip address\(es\):((?:\s*,?\s*\d+(?:\.\d+){3})+)/;
  var m, res = [];
  m=regex.exec(data);
  if (m) {
     res = m[1].split(',').map(function (x) { return x.trim(); });
  }
  Logger.log(res);
}

结果:

基本上,((?:\s*,?\s*\d+(?:\.\d+){3})+) 捕获组匹配一个可选的 ,,其中包含 0+ 个空格,然后将类似 IP 的子字符串分成 1 个组,然后您只需将其与 , 拆分,并从空格中删除结果项.

【讨论】:

    猜你喜欢
    • 2017-07-16
    • 2015-04-11
    • 2013-06-02
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多