我不是一个正则表达式的人,所以我的问题看似简单。你如何从这样的字符串中提取小时和分钟:
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位数字并包含':'本身。
非常感谢任何有关评论的帮助。
答案 0 :(得分:2)
您可以使用positive lookbehind:
/(?<=T)\d{2}:\d{2}/
这实际上意味着我们匹配两个数字后跟冒号后跟2个数字,但它们必须在前面有一个“T”。但是,不要将此添加到匹配项中,因为前瞻/后端不匹配。
[^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/
所以现在你有了
小时和分钟可供使用