2 Stimmen

Aufteilung einer Zeichenkette in Javascript in ein Array von eingebetteten Zahlen

Ich versuche, eine Zeichenkette in ein Array aufzuteilen, wobei alle Zahlen separat aufgeteilt werden:

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

Der einzige Weg, ich denke, ich kann dies tun, ist die Funktion Form der Regex ersetzen, mit veränderbaren Zustand als das Array, aber das scheint hässlich. (Siehe unten TBD, denn das ist die Art und Weise, wie ich versuchen werde, es standardmäßig zu tun).

Gibt es einen einfacheren Weg?

5voto

Anirudh Ramanathan Punkte 45125

Verwendung von String.split() selbst, sondern mit Rückhaltung des Abscheiders.

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

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

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

Enthält Trennzeichen einschließende Klammern, werden übereinstimmende Ergebnisse zurückgegeben in der Reihe .

3voto

Ry- Punkte 208020

match kann das sehr gut tun:

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

Kein kleines Problem :)

1voto

Jason S Punkte 178087

Hier ist mein ursprünglicher Ansatz, der gar nicht so schlecht aussieht:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X