找到匹配提取下n个字符但排除匹配本身

时间:2013-12-03 19:17:11

标签: regex

我不是一个正则表达式的人,所以我的问题看似简单。你如何从这样的字符串中提取小时和分钟:

2013-12-03T10:45:33-07:00

所以我只想从上面的字符串中得到10:45并忽略其余部分。

我试过/[0-2][0-9]:[0-5][0-9]/但是这给了我:10:45以及07:00

还尝试/[T][0-2][0-9]:[0-5][0-9]/,但这给了我T10:45

我尝试使用^ [^T][ ][ ]:[ ][ ]排除'T',但这给了我-07:00!

我考虑过第一次出现':',但我不知道如何在':'之前和之后提取2位数字并包含':'本身。

非常感谢任何有关评论的帮助。

2 个答案:

答案 0 :(得分:2)

您可以使用positive lookbehind

/(?<=T)\d{2}:\d{2}/

这实际上意味着我们匹配两个数字后跟冒号后跟2个数字,但它们必须在前面有一个“T”。但是,不要将此添加到匹配项中,因为前瞻/后端不匹配。

DEMO

[^T]表示“任何不是T的字符”,这就是它无效的原因。


JS regex不支持前瞻/后端(see?),但您只需使用/T(\d{2}:\d{2})/创建匹配组,然后匹配[1]

var timeString = '2013-12-03T10:45:33-07:00';
var time = timeString.match(/T(\d{2}:\d{2})/)[1];
console.log(time); //10:45

答案 1 :(得分:1)

在没有繁重的正则表达式知识的情况下提取的简单方法是执行类似

的操作
foo = "2013-12-03T10:45:33-07:00"
(hours,minutes,junk) = foo.split ":"
hours =~ s/*(\d\d)$/$1/

所以现在你有了

小时分钟可供使用