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

私がこれを行うことができると思う唯一の方法は、可変状態を配列として使用して、正規表現置換の関数形式を使用することですが、それは醜いようです。(以下のTBDを参照してください。これがデフォルトで実行しようとしている方法です。)

もっと簡単な方法はありますか?

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

セパレーターにキャプチャー括弧が含まれている場合、一致した結果が配列に返されます。

于 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 に答える