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

Ath*_*ali 2 javascript regex date

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

11/12/2014
Run Code Online (Sandbox Code Playgroud)

要么

6/12/2014
Run Code Online (Sandbox Code Playgroud)

要么

11/5/2014
Run Code Online (Sandbox Code Playgroud)

在所有上述情况,我将需要能够提取每个值mm,ddyyyy这样我可以计算做这样的事情:

Month = regex that returns month part.
Day = regex that returns day part
Year = regex that returns 4 digits year part.
Run Code Online (Sandbox Code Playgroud)

\d{2}/\d{2}/\d{2} 符合整个事情.

Mic*_*zyn 8

Regexp解决方案

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

如果要创建匹配组,请使用"("和")"(括号).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"]
Run Code Online (Sandbox Code Playgroud)

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

替代方案

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

"11/12/2014".split('/'); // ["11", "12", "2014"]
Run Code Online (Sandbox Code Playgroud)

但无论字符串实际包含什么,它都可以工作(它可能包含字符串"ba/tm/an"和split,但仍然会返回一个包含三个元素的数组).因此,如果要验证日期,Regexp可能更适合.


Joh*_*son 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"
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)