2

我正在尝试将一个字符串拆分为一个数组,其中任何数字都被单独拆分:

function mysplit(s) { ??? }

// What I want to have happen is this:
//
// mysplit('ABC12DEF678IJ') --> ['ABC',12,'DEF',678,'IJ']
// mysplit('ABCD123') --> ['ABCD',123]
// mysplit('Eeyore') --> ['Eeyore']

我认为我能做到这一点的唯一方法是使用正则表达式替换的函数形式,使用可变状态作为数组,但这看起来很难看。(见下文待定,因为这是我默认尝试的方式。)

有没有更简单的方法?

4

3 回答 3

5

使用String.split()本身但带有分隔符保留。

'ABC12DEF678IJ'.split(/(\d+)/);
["ABC", "12", "DEF", "678", "IJ"]

'ABCD123'.split(/(\d+)/)
["ABCD", "123", ""] //tiny issue. ;)

'Eeyore'.split(/(\d+)/)
["Eeyore"]

如果 separator 包含捕获括号,则在数组中返回匹配的结果。

于 2012-12-12T17:04:38.643 回答
3

match可以做得很好:

function mysplit(s) {
    return s.match(/\d+|\D+/g);
}

没有小问题:)

于 2012-12-12T17:06:22.543 回答
1

作为参考,这里是我原来的方法,看起来还不错:

function numsplit(s)
{
    var a = [];
    s.replace(/([0-9]+)|([^0-9]+)/g, function(g) {
        a.push(isNaN(g) ? g : (+g));
    });
    return a;
}
于 2012-12-12T17:05:56.787 回答