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());
我无法获得正则表达式来匹配我的 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());