您可以使用正则表达式将字符串解析为其组件:
var myregexp = /^(\d{1,2}?)\D?(\d{2})?\b\s*([ap]m)?$/;
var match = myregexp.exec(subject);
if (match != null) {
hours = match[1];
minutes = match[2];
ampm = match[3];
}
解释:
^ # Start of string
( # Capture into group 1:
\d{1,2}? # one or two digits, preferably one
) # End of group 1
\D? # Match an optional non-digit
( # Capture into group 2:
\d{2} # Exactly two digits
)? # End of (optional) group 2
\b # End of number
\s* # Optional whitespace
( # Capture into group 3:
[ap]m # am or pm
)? # End of (optional) group 3
$ # End of string
然后,您可以使用结果来构造一个新的规范化字符串,在这种情况下,这意味着
- 如果小时部分是个位数,则添加零
- 如果
00
分钟部分是undefined
- 决定如果
am
/pm
部分是undefined
.
正则表达式无法完成这部分练习,因为正则表达式只能匹配原始字符串中存在的文本,而不能动态添加。