从日期正则表达式中提取月、日和年



我有一个"mm/dd/yyyy"格式的日期。但是,根据日期或月份的不同,不能保证"mm/dd"部分一定有两位数。所以日期可能是:

11/12/2014

6/12/2014

11/5/2014

在上述所有情况下,我需要能够提取mmddyyyy的每个值,以便我可以做这样的事情进行计算:

Month = regex that returns month part.
Day = regex that returns day part
Year = regex that returns 4 digits year part.

这个d{2}/d{2}/d{2}与整个事情相匹配。

正则表达式解决方案

匹配所有日期的正确正则表达式是:d{1,2}/d{1,2}/d{4} 。表示法 {n,m}被称为限制重复,在这种情况下d{n,m}表示"在n到m位(包括)之间"。你可以在这里阅读更多关于它的信息:限制重复。

如果要创建匹配的组,请使用"("和")"(括号)。此外,在 JavaScript 中,你必须用 转义/,因此你的正则表达式是:/(d{1,2})/(d{1,2})/(d{4})/

您可以使用正则表达式exec函数将字符串与其匹配。它返回一个数组,其中包含匹配的文本作为第一个元素,然后为每个匹配组返回一个项目。

您可以在MDN RegExp.prototype.eec上找到更多信息,或者查看下面的例子:

const datePattern = /(d{1,2})/(d{1,2})/(d{4})/;
const date = datePattern.exec("11/12/2014"); // ["11/12/2014", "11", "12", "2014"]

注意:如果传递了无效字符串(与正则表达式不匹配),exec函数将返回null 。这是对用户的输入或数据进行简短验证的简单方法。

替代解决方案

或者,您可以简单地拆分字符串:

"11/12/2014".split('/'); // ["11", "12", "2014"]

但是无论字符串实际包含什么(它可能包含字符串"ba/tm/an"并且拆分仍将返回一个包含三个元素的数组),这都将起作用。出于这个原因,如果您想验证日期,正则表达式可能更适合。

试试这个:

var str = "11/6/2014";
var match = str.match(/(d{1,2})/(d{1,2})/(d{4})/);
console.log(match[1]); // => "11"
console.log(match[2]); // => "6"
console.log(match[3]); // => "2014"

或者,您可以创建一个日期对象:

var date = new Date("11/6/2014");
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
console.log(year);  // => 2014
console.log(month); // => 11
console.log(day);   // => 6

你不需要正则表达式来提取片段,只需使用 split .我使用正则表达式来允许正斜杠或反斜杠。

var date = "1/10/2014"
, dateParts = date.split(/\|//)
, month = dateParts[0]
, day = dateParts[1]
, year = dateParts[2];

最新更新