javascript 用法中的正则表达式失败

Regular expression failure in javascript usage

我无法获得正则表达式来匹配我的 javascript 函数中的任何内容,而且我 运行 不知道哪里出了问题。我一直在研究这个片段,以更好地进行 1/2 天的部分搜索和尝试其他人的正则表达式字符串,但每次尝试都因 m=null 而失败。它必须是简单的东西......我看不到它。

我确定的正则表达式字符串在这里得到验证:Sample

js函数的目标是让输入的时间按24hr时间输出。警报仅用于测试。

这是我的 javascript 代码:

//
// Enable a prototype getHours function
//
Date.prototype.addHours= function(h){
   this.setHours(this.getHours()+h);
    return this;
}
        
//
// Input:  string '07/19/2020 08:40 PM'
// Output: date   07/19/2020 20:40
//
function strToDate(dateString){
    try {   
        var dateobject;
        var dateReg = /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2}) ([AP]M)$/;
        var m = dateString.match(dateReg);
        if (m) {
            dateobject = new Date(m[1], m[2]-1, m[3], m[4], m[5], 0)
            if (m[6] == 'PM') {
                dateobject = dateobject.addHours(12)
            }
        } else { 
            alert('no match');             
        }
        return dateObject;
    } catch (ex) {
        alert('error: ' + ex);
    }
}

如有任何建议,我们将不胜感激!

尝试换行:

var dateReg = /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}):(\d{1,2}) ([AP]M)$/;

至:

var dateReg = /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}) ([AP]M)$/;

您的正则表达式中有两个冒号 (:),但当时只有一个冒号。

时间部分和 AM/PM 部分之间还缺少 space。

我在这里验证过:https://regex101.com/r/szity1/1

您的代码已在下面修复,错误是:

  • 正则表达式中的错误模式,因为您没有传递秒数
  • dateObject 变量名大小写错误
  • Date 构造函数中的参数顺序错误

//
// Enable a prototype getHours function
//
Date.prototype.addHours= function(h){
   this.setHours(this.getHours()+h);
    return this;
}
        
//
// Input:  string '07/19/2020 08:40 PM'
// Output: date   07/19/2020 20:40
//
function strToDate(dateString){
    try {   
        var dateObject;
        var dateReg = /^(\d{1,2})\/(\d{1,2})\/(\d{4}) (\d{1,2}):(\d{1,2}) ([AP]M)$/;
        var m = dateString.match(dateReg);
        if (m) {
            dateObject = new Date(m[3], m[1]-1, m[2], m[4], m[5], 0)
            if (m[6] == 'PM') {
                dateObject = dateObject.addHours(12)
            }
        } else { 
            alert('no match');             
        }
        return dateObject;
    } catch (ex) {
        alert('error: ' + ex);
    }
}

console.log(strToDate('07/19/2020 08:40 PM').toLocaleString());