Javascript RegExp替换以获取时间

时间:2013-11-04 13:53:06

标签: javascript regex

我正在尝试解决RegExp问题。我找到了80%的模式。如果有人帮助我剩下的20%会有很大的帮助。

例如字符串:

var str = "Digital Presentation;Stadium Seating (11:05 AM), (1:40), 4:30, 7:30, 10:50 PM"; 
到目前为止

我的模式:

var patt = /[^0-9|:|,|\b\sAM\b|\b\sPM\b]/g;

有关:

var result = str.replace(patt, '');

我得到的是:

P 11:05 AM, 1:40, 4:30, 7:30, 10:50 PM

我想要的结果是:

11:05 AM, 1:40, 4:30, 7:30, 10:50 PM

JSFiddle:http://jsfiddle.net/QzYwu/1/

我需要的是匹配spaceAM和spacePM,而不是我的模式,它匹配所有P,A,M和空格的出现。

另一个字符串示例是:

Digital Presentation;Movies and Mimosas (11:00 AM)

我的模式是:

PM  M 11:00 AM

我最想得到的是:

11:00 AM

提前致谢。

2 个答案:

答案 0 :(得分:1)

这部分是问题所在:

var patt = /[^0-9|:|,|\b\sAM\b|\b\sPM\b]/g;

它没有做你认为它正在做的事情。

在内部字符类中,它将删除除数字,冒号,管道,逗号,文字\ b,A,M和P之外的所有内容

正确的基于正则表达式的代码是:

str = "Digital Presentation;Stadium Seating (11:05 AM), (1:40), 4:30, 7:30, 10:50 PM"
str.match(/\d{1,2}:\d{2}( +[AP]M)?/g).join(', ');
//=> 11:05 AM, 1:40, 4:30, 7:30, 10:50 PM

答案 1 :(得分:1)

修复了Danstahr的正则表达式

var timereg = /[0-9]{1,2}:[0-9]{1,2}( \b(AM|PM))?/g

"Digital Presentation;Stadium Seating (11:05 AM), (1:40), 4:30, 7:30, 10:50 PM".match(/[0-9]{1,2}:[0-9]{1,2}( \b(AM|PM))?/g)
//=> ["11:05 AM", "1:40", "4:30", "7:30", "10:50 PM"]