0

我知道这个问题已经被问过很多次了,但这些例子对我不起作用。

我试图在一个正则表达式中获得一小部分时间。我所拥有的是:

minute = new RegExp(":[0-9]{1,2}").exec(time).toString().replace(":", "");

如果不使用 .replace,我怎样才能完成这项工作?

4

6 回答 6

4

假设时间是格式,NN:NN那么可以像这样提取分钟:

minute = time.match(/\d{2}$/)[0];

或简单的拆分:

minute = time.split(':')[1];
于 2012-08-29T15:29:48.503 回答
2

使用捕获组仅获取您想要的内容。

var time = '12:29',
    minute = /:([0-9]{1,2})/.exec(time)[1];

// minute is "29"
于 2012-08-29T15:29:07.130 回答
1

如果您还没有这样做,请将“时间”存储为Date对象。然后您可以使用getMinutes()将分钟组件拉出。

minute = time.getMinutes();
于 2012-08-29T15:34:03.197 回答
1

假设这time是一个像“10:15 AM”这样的时间字符串,您可以(并且应该)使用 Date 对象。这是适合这项工作的工具,它更灵活,因为它是用来处理日期/时间数据的。

var time = '10:15 AM';
// handle either a full date string OR a time string
var d = new Date(time);
if (isNaN(d.getTime()))
    var d = new Date('1/1/2012 '+time);

试试看:http: //jsfiddle.net/gsg8X/

可能比尝试确定秒数是否存在要好,这可能会破坏正则表达式,或者使其变得比需要的更复杂。我认为您最好使用与日期/时间相关的工具来解析与日期/时间相关的数据。

文档

于 2012-08-29T15:34:51.800 回答
0

您需要某种位置锚来抓住字符串的最后一部分

(/:([0-9]{1,2}$)/)
于 2012-08-29T15:31:03.177 回答
0

尝试这个:

minute = new RegExp(":([0-9]{1,2})").exec(time)[1];

这将匹配整个内容,但存储括号中匹配的任何部分以供您以后使用。因此[1].



将以下内容留在此处,以防有人来寻找非 JavaScript 答案。

这在javascript中不起作用,因为它不支持lookbehinds。谢谢@999。

尝试使用积极的向后看。这样你甚至不需要更换:)

minute = new RegExp("(?<=:)[0:9]{1,2}").exec(time).toString();

[0:9]{1,2}是您实际要匹配的模式。(?<=:)只是确保它后面有一个冒号,而不实际消耗任何东西。

于 2012-08-29T15:31:53.887 回答