我试图想出一个正则表达式来从字符串中提取时间来构建应用程序。
这是我到目前为止所得到的。不知道我在这里做错了什么。
https://regex101.com/r/fC0lI5/1
我可以获得一些字符串但不是所有不同的变体。
var cookieValue=$.cookie("nav");
$('.nav.navbar-nav > li').on('click', function() {
$.removeCookie("nav");
$.cookie("nav", $('a',this).attr("id"), { expires: 7, path: '/' });
var cookieValue = $.cookie("nav");
});
if(cookieValue)
{
$('#' + cookieValue).removeClass('active');
$('#' + cookieValue).parent().addClass('active');
}
我想要的是两个被捕获的小组。所以我知道第一组是([01]?[0-9]*:?[0-9]*[AP]M?)-([01]?[0-9]*:?[0-9]*[AP]M?)
8-8:30AM MON TUES THURS FRI
8-10:30AM MON TUES THURS FRI
8:30AM-10:30AM MON TUES THURS FRI
10:30AM-11:30AM MON TUES THURS FRI
10:30AM-11:30AM MON TUES THURS FRI
8AM-8:30AM
10-11PM
时间,后一组是FROM
时间。
答案 0 :(得分:5)
([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
^^ ^^ ^^ ^^
只需将AM
组件设为可选。请参阅demo.Also制作第一部分+
,否则它将匹配空字符串。
答案 1 :(得分:5)
任一捕获组中的AM / PM都不是可选的
([01]?[0-9]+:?[0-9]*(?:[AP]M)?)-([01]?[0-9]+:?[0-9]*(?:[AP]M)?)
我认为我的比其他人更有效,因为其他人会允许(他们已经修复了他们)
8M-9M, which is not valid.
答案 2 :(得分:2)
正如其他答案所指出的,A和P不是可选的。此外,你的正则表达式将匹配其他字符串(如“:A-:A”或“98387899A-A”)。
这可行,并且会更加严格:
((?:[01]?[0-9]:)?[0-9]{1,2}(?:AM|PM)?)-((?:[01]?[0-9]:)?[0-9]{1,2}(?:AM|PM)?)
有关正则表达式语法的完整说明,请参阅the Python manual。