我想知道是否有办法(我希望有一种方法,或者我遇到麻烦:p),找到任何一种字符串的日期。
以下是一些让您了解我要找的内容的示例:
var string1 = 'blabla-test-20140215.dat'
我需要访问'20140215'
var string2 = 'blabla_Test.20141212'
我需要访问'20141212'
好吧,我希望能够在字符串中找到yyyymmdd格式的日期,无论字符串是什么。
谢谢你,如果你有任何线索,我还没有在互联网上找到任何东西。
编辑:
字符串中可以有其他数字,但始终小于8。 例如:
var string3 = 'blabla-2526-20141212'
我要找的日期总是与其他数字分开。我不能:
var string4 = 'blabla-252620141212'
我只是想找到代表日期的数字(格式为yyyymmdd,例如在string3中我想要20141212,参考:2014年12月12日)
答案 0 :(得分:3)
我注意到,但如果你的字符串只包含日期的数字,你可以使用RexEx吗?
可能是这样的:
var regex = /[0-9]+/;
var string1 ="blabla-test-20140215.dat";
var found = regex.exec(string1);
alert('Found: ' + found);
答案 1 :(得分:2)
使用正则表达式从字符串中提取八个数字序列非常简单,只需使用以下内容:
var dateString = (/\d{8}/.exec(string) || [])[0];
这将在给定的字符串中找到第一个八个字符长的数字串。如果不存在这样的序列,则它将是未定义的。然后,您可以根据需要使用它来创建Date对象。
答案 2 :(得分:2)
你应该使用正则表达式。
re = /(\d{4})(\d{2})(\d{2})/g //create a regex that matches: 4 digits followed by 2 digits followed by 2 digits
///// yyyy mm dd
result = re.exec(string1) //execute the regex
// now, access the different capture groups according to their indexes
console.log(result[1]) // yyyy
console.log(result[2]) // mm
console.log(result[3]) // dd
答案 3 :(得分:2)
此解决方案将检查有效日期(不只是任意8个任意数字):
function hasDate(input) {
var matches = input.match(/(\d{4})(\d{2})(\d{2})/),
indexOf = function (elem, arr) {
var len = arr.length, i;
for (i = 0; i < len; i++) {
if (arr[i] === elem) {
return i;
}
}
return -1;
},
months31 = [1, 3, 5, 7, 8, 10, 12],
idx, isLeapYear,
year, month, day;
if (matches) {
year = parseInt(matches[1]);
month = parseInt(matches[2]);
day = parseInt(matches[3]);
//Check invalid dates from the start
if (month < 1 || month > 12) {
return false;
}
else if (day < 1 || day > 31) {
return false;
}
idx = indexOf(month, months31);
isLeapYear = ((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0);
//Month has 31 days, we are good
if (idx >= 0) {
return true;
}
//Feb - check for leap year
else if (month === 2 && (day <= 28 || (isLeapYear && day <= 29))) {
return true;
}
//All other months
else if (month !== 2 && day <= 30) {
return true;
}
}
//If we got this far, its a bad date
return false;
}
//return true
hasDate('blabla_Test.20141212');
//return false
hasDate('blabla_Test.20140229');
//return true
hasDate('blah_20140228');
//return true
hasDate('blah_20000229');