我写了一些东西,我不确定我的逻辑是否正确。我认为它应该接受几乎任何格式。唯一的问题是,如果字符串前面有一个数字,例如价格……那么想办法解决这个问题可能会很奇怪。
var re = /(a.m.|p.m.|pm|am)/g, // Filter By
str = "String blab la bla 10 to 12:00 a.m. asdfasdfas"; // String To Test
var timeArray = new Array();
var timeStamp = new Array();
while ((matcher = re.exec(str)) != null) {
timeArray.push(matcher.index);
timeStamp.push(matcher[0]);
}
// Get Start And End Time
startTime = str.substring(timeArray[0] - 6, timeArray[0]);
finishTime = str.substring(timeArray[1] - 13, timeArray[1]);
if (startTime.length == 2) {
finishTime = startTime.substr(1,2);
startTime = startTime.slice(0,1);
} else {
console.log(finishTime);
var matches = /(-|to|till)/g;
if (finishTime.match(matches) != null) {
var splitTime = startTime.split( matches );
var slpitTimeFinish = finishTime.split( matches );
if (timeStamp.length > 1) {
finishTime = slpitTimeFinish[2].replace(/[A-Za-z$.]/g, "");
startTime = splitTime[0].replace(/[A-Za-z$.]/g, "");
} else {
finishTime = slpitTimeFinish[2].replace(/[A-Za-z$.]/g, "");
startTime = slpitTimeFinish[0].replace(/[A-Za-z$.]/g, "");
}
startTime = startTime.replace(/\s+/g, ''); // Remove Spaces
finishTime = finishTime.replace(/\s+/g, ''); // Remove Spaces
} else {
finishTime = finishTime.replace(/[A-Za-z$.]/g, "");
finishTime = finishTime.replace(/\s+/g, ''); // Remove Spaces
startTime = startTime.replace(/[A-Za-z$.]/g, "");
startTime = startTime.replace(/\s+/g, ''); // Remove Spaces
}
}
// Get Time Stamp
if (timeStamp.length > 1) {
eventStartStamp = timeStamp[0];
eventEndStamp = timeStamp[1];
} else {
eventStartStamp = timeStamp[0];
eventEndStamp = timeStamp[0];
}
console.log ("Event Starts At "+ startTime + " " + eventStartStamp +" Ends At "+ finishTime + " " + eventEndStamp );
这是我进行的一些测试,如果有人有更好的方法,或者建议他们的方法,我会全力以赴。这可能被过度编码。
str = "String blab la bla 12a.m. to 1pm asdfasdfas";
returns "Event Starts At 12 a.m. Ends At 1 pm
str = "String blab la bla 12-1pm asdfasdfas";
returns "Event Starts At 12 pm Ends At 1 pm
str = "String blab la bla 12:00a.m. to 1:00 p.m. asdfasdfas"
returns "Event Starts At 12 am Ends At 1 pm
str = "String blab la bla 12:00 to 1:00 p.m. asdfasdfas"`
returns "Event Starts At 12:00 p.m. Ends at 1:00 p.m.
str = "String blab la bla 12:00 - 1:00 p.m. asdfasdfas"
returns "Event Starts At 12:00 p.m. Ends at 1:00 p.m.
如果有人在晚上 7 点到 10 点加入,也应该有效。我只需要弄清楚如何在时间之前摆脱任何东西,在这种情况下可能会发生。我想这会得到相当数量的好数据。让我知道是否有人有更好的解决方案。我知道这是一个很大的过度编码,我可以减少一点,我只是比大多数人更直观。