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

时间:2014-11-14 16:35:31

标签: javascript regex date

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

11/12/2014

6/12/2014

11/5/2014

在上述所有情况下,我需要能够提取mmddyyyy的每个值,以便我可以执行以下计算:< / p>

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}匹配整个事情。

3 个答案:

答案 0 :(得分:8)

Regexp Solution

匹配所有日期的正确正则表达式为:\d{1,2}/\d{1,2}/\d{4}。符号 {n,m}被称为限制重复,在这种情况下,\d{n,m}表示&#34;在n和m位数之间(包括)&#34;。您可以在此处详细了解:Limiting Repetition

如果要创建匹配的组,请使用&#34;(&#34;和&#34;)&#34; (括弧)。 Addiitonally,在JavaScript中,您必须使用/转义\,因此您的正则表达式为:/(\d{1,2})\/(\d{1,2})\/(\d{4})/

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

您可以在MDN RegExp.prototype.exec上找到更多信息,或参阅下面的示例:

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"并且split仍将返回包含三个元素的数组),这将起作用。因此,如果要验证日期,Regexp可能更适合。

答案 1 :(得分:7)

试试这个:

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

答案 2 :(得分:0)

您不需要正则表达式来提取片段,只需使用split即可。我使用正则表达式来允许向前或向后斜杠。

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