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