将Javascript中的字符串拆分为嵌入数字的数组

时间:2012-12-12 17:01:40

标签: javascript string

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

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']

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

有更简单的方法吗?

3 个答案:

答案 0 :(得分:5)

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

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

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

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

如果分隔符包含捕获括号,则匹配的结果将在数组中返回

答案 1 :(得分:3)

match可以做得很好:

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

No tiny issue :)

答案 2 :(得分:1)

这里的参考是我最初的方法,它看起来并不太糟糕:

function numsplit(s)
{
    var a = [];
    s.replace(/([0-9]+)|([^0-9]+)/g, function(g) {
        a.push(isNaN(g) ? g : (+g));
    });
    return a;
}