3

例如,如果初始字符串s"0123456789",则所需的输出将是一个数组["01", "23", "45", "67", "89"]

在 JavaScript 中寻找优雅的解决方案。

我在想(非常不优雅)是通过拆分空字符串并使用 Array.forEach 方法来遍历字符串,并在每两个字符后插入一个分隔符,然后按该分隔符拆分。这不是一个好的解决方案,但这是我的起点。

编辑:已发布 RegExp 解决方案。我很想看看是否还有其他方法。

4

2 回答 2

6

怎么样:

var array = ("0123456789").match(/\w{1,2}/g);

在这里,我们使用.match()您的字符串来匹配任何两个或单个 ( {1,2}) 单词字符 ( \w) 并返回结果数组。


关于您对非正则表达式解决方案的编辑;你可以像这样做一个不太优雅的功能:

String.prototype.getPairs = function()
{
    var pairs = [];
    for(var i = 0; i < this.length; i += 2)
    {
        pairs[pairs.length] = this.substr(i, 2);
    }

    return pairs;
}

var array = ("01234567890").getPairs();
于 2013-04-15T02:18:19.607 回答
2

如果您想使用拆分(为什么不),您可以执行以下操作:

s.split(/([^][^])/).filter(function(x){return x})

哪个使用两个连续字符作为分隔符进行拆分(但因为它们在捕获组中,所以它们也是拆分结果的一部分。使用标识函数过滤它可以消除空字符串(在“分隔符”之间)。注意在奇数个字符的情况下,最后一个字符将作为拆分输出,而不是分隔符,但这没关系,因为它仍然会测试真实性。

(如果你真的想匹配任何字符,你[^]是如何.用 javascript 拼写的。我必须查一下。)

于 2013-04-15T02:35:00.313 回答