使用RegExp将整数拆分为多个部分

时间:2013-07-22 07:00:38

标签: javascript regex split

我有一个输入字段,用户可以用不同的格式输入时间(800,08:00,08:00 am等)。我需要显示用户输入的时间格式(xx:xx am /时)。

示例:

1.'800'=>'08:00';
2.'1245'=>'12:45';
3.'1000 am'=>'10:00 am';
4.'10.00 am'=>'10:00 am';
5.'9 am'=>'09:00 am';

所以我可以输入“800”并将其转换为“8:00”或者我可以输入“2145”并将其转换为“21:45”。

我尝试使用str.split(/[:;,. \/]/);,但这仅适用于示例4的情况。

2 个答案:

答案 0 :(得分:3)

您可以使用正则表达式将字符串解析为其组件:

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时该怎么办。

正则表达式不能执行此练习的这一部分,因为正则表达式只能匹配原始字符串中存在的文本,而不是动态添加到文本中。

答案 1 :(得分:0)

您无法使用正则表达式执行此操作。您需要编写一个函数来将一些逻辑应用于输入字符串并确定将其转换为的时间。您可能的一些输入是

  • 4
  • 12:00 am
  • 1200
  • 上午12点
  • 4:40
  • 4.40

等。这需要你在一个函数中完成。