我知道这个问题已经被问过很多次了,但这些例子对我不起作用。
我试图在一个正则表达式中获得一小部分时间。我所拥有的是:
minute = new RegExp(":[0-9]{1,2}").exec(time).toString().replace(":", "");
如果不使用 .replace,我怎样才能完成这项工作?
我知道这个问题已经被问过很多次了,但这些例子对我不起作用。
我试图在一个正则表达式中获得一小部分时间。我所拥有的是:
minute = new RegExp(":[0-9]{1,2}").exec(time).toString().replace(":", "");
如果不使用 .replace,我怎样才能完成这项工作?
假设时间是格式,NN:NN
那么可以像这样提取分钟:
minute = time.match(/\d{2}$/)[0];
或简单的拆分:
minute = time.split(':')[1];
使用捕获组仅获取您想要的内容。
var time = '12:29',
minute = /:([0-9]{1,2})/.exec(time)[1];
// minute is "29"
如果您还没有这样做,请将“时间”存储为Date对象。然后您可以使用getMinutes()将分钟组件拉出。
minute = time.getMinutes();
假设这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/
可能比尝试确定秒数是否存在要好,这可能会破坏正则表达式,或者使其变得比需要的更复杂。我认为您最好使用与日期/时间相关的工具来解析与日期/时间相关的数据。
文档
您需要某种位置锚来抓住字符串的最后一部分
(/:([0-9]{1,2}$)/)
尝试这个:
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}
是您实际要匹配的模式。(?<=:)
只是确保它后面有一个冒号,而不实际消耗任何东西。