0

我有一个字符串

var str = "2 Days, 2 Hours 10 Minutes";

如果我 :

str.split(/Days/);

我得到:

["2 ", ", 2 Hours 10 Minutes"]

所以我想我可以使用 string.split 来拆分我的字符串并用这种方法得到“天”、“小时”和“分钟”。

但是,当我有时有“s”或没有“s”时,我该怎么办,例如:

var str = "1 Day, 2 Hours 10 Minutes";

这里我的字符串是“1 Day”而不是“2 Days”,所以“day”值上没有“s”。有没有办法分割一个字符串

Day(s)
Hour(s)
Minute(s)
4

3 回答 3

2

您正在使用正则表达式进行拆分,因此只需在“s”之后放置一个问号即可使其成为可选:

str.split(/Days?/);

i您可能还希望通过将标志添加到正则表达式来使其不区分大小写:

str.split(/days?/i);

match您也可以使用string 方法(而不是)用一行来完成整个操作,split如下所示:

("2 Days, 3 hours, 5 minutes").match(/(\d+)\s*days?\,?\s*(\d+)\s*hours?\,?\s*(\d+)\s*minutes?/i)

这将返回一个像这样的数组:

["2 Days, 3 hours, 5 minutes", "2", "3", "5"]

所以位置 1、2 和 3 中的项目分别是天、小时和分钟。

将该正则表达式分解为英文:

  • (捕获的组,即数组项 1) 1 个或多个数字
  • 零个或多个空白字符
  • 可选的
  • 可选逗号
  • 零个或多个空格字符......并重复几小时和几分钟。

在此处查看有关字符串的正则表达式匹配的文档,以及有关如何在此处使用正则表达式的出色文档。

于 2012-12-03T15:03:17.330 回答
1

当然:

str.split(/Days?/);
str.split(/Hours?/);
str.split(/Minutes?/);
于 2012-12-03T15:02:36.410 回答
1

如果您尝试将 Days/Hours/Minutes 放入单个 3 元素数组,并且您可以保证您的输入将始终有一个值(即使该值为 0),那么消除所有非数字可能会更简单和非空格,然后在空间上拆分并删除空元素。

var result = new Array();
var tempstr = str.replace(/[^0-9\s]/g, ''); 
var arr = tempstr.split(' ');

for(var i = 0; i<arr.length; i++) {
    if (arr[i]) {
        result.push(arr[i]);
    }
}

注意:从这个 SO Post中挪用的阵列清理循环。

于 2012-12-03T15:13:53.453 回答