将模式与字符串匹配并提取信息

时间:2016-04-19 08:30:38

标签: javascript regex date google-apps-script

我正在开发Google Apps脚本。我希望用户输入一个类似的模式 MM/DD/YYYY hh:mm:ss

根据模式,我想从字符串中提取信息。该字符串类似于02/29/2016 07:00:00 PM EST。我想使用用户提供的模式从这个时间戳字符串中提取日期,月份,年份,小时,分钟和秒。

如何在JavaScript中实现这一目标?

3 个答案:

答案 0 :(得分:1)

您可以尝试此示例(在Google应用脚本中):

var a = extractDateTimeInfo('MM/DD/YYYY hh:mm:ss', '02/29/2016 07:10:14 PM EST');
Logger.log(a);  //output: Year: 2016, month: 02, date: 29, hours: 07, min: 10, sec: 14

var b = extractDateTimeInfo('YYYY-MM-DD hh:mm', '2016-12-26 16:13 PM EST');
Logger.log(b);  //output: Year: 2016, month: 12, date: 26, hours: 16, min: 13, sec: 


function extractDateTimeInfo(patt, t) {
  var YYYYPos = patt.indexOf('YYYY');
  var MMPos = patt.indexOf('MM');
  var DDPos = patt.indexOf('DD');
  var hhPos = patt.indexOf('hh');
  var mmPos = patt.indexOf('mm');
  var ssPos = patt.indexOf('ss');

  var YYYY = YYYYPos >= 0 ? t.substr(YYYYPos, 4) : '';
  var MM = MMPos >= 0 ? t.substr(MMPos, 2) : '';
  var DD = DDPos >= 0 ? t.substr(DDPos, 2) : '';
  var hh = hhPos >= 0 ? t.substr(hhPos, 2) : '';
  var mm = mmPos >= 0 ? t.substr(mmPos, 2) : '';
  var ss = ssPos >= 0 ? t.substr(ssPos, 2) : '';
  return Utilities.formatString("Year: %s, month: %s, date: %s, hours: %s, min: %s, sec: %s", YYYY, MM, DD, hh, mm, ss);
}

但是,我不知道您期望的用户给出的模式类型。但你可以根据YY等其他可能性进行调整。

您可以将结果放入extractDateTimeInfo函数中的数组......

答案 1 :(得分:0)

此正则表达式将起作用(但不检查用户输入的值是否有效)

(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)

<强> Regex Demo

JS代码

var re = /(\d+)\/(\d+)\/(\d+)\s+(\d+):(\d+):(\d+)/; 
var str = '02/29/2016 07:00:00 PM EST';

var result = str.match(re);
document.writeln(result[1] + '<br>');
document.writeln(result[2] + '<br>');
document.writeln(result[3] + '<br>');
document.writeln(result[4] + '<br>');
document.writeln(result[5] + '<br>');
document.writeln(result[6] + '<br>');

<强> Ideone Demo

答案 2 :(得分:0)

试试这个:

/^(0?\d|1[0-2])\/([0-2]?\d|3[01])\/(\d{1,4})\s([01]?\d|2[0-3]):([0-5]?\d):([0-5]?\d)$/

我尽可能地限制输入:
第1组:月份,限制在0到12之间 第2组:天数,限制在0至31之间 第3组:年限,限制为4个字符

第4组:小时数,限制在0至23之间 第5组:会议纪要,限制在0至59之间 第6组:秒数,限制在0到59之间