在某个字符后匹配所有文本的正则表达式是什么?

时间:2012-08-29 15:25:53

标签: javascript regex

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

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

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

如何在不使用.replace的情况下完成此操作?

6 个答案:

答案 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}是您实际想要匹配的模式。 (?<=:)只是确保它后面有一个冒号,而不会实际消耗任何东西。