773 Stimmen

Wie kann ich eine Zeichenkette mit mehreren Trennzeichen in JavaScript aufteilen?

Wie kann ich eine Zeichenkette mit mehreren Trennzeichen in JavaScript aufteilen?

Ich versuche, beides zu trennen Kommas y Räume aber AFAIK ist JavaScript's split() Funktion unterstützt nur ein Trennzeichen.

6 Stimmen

Ich hatte dieses Problem, als ich versuchte, Dateipfade aufzuteilen, die mit nodejs unter Windows erstellt wurden. Manchmal gab es Schrägstriche vorwärts "/" und rückwärts "\" im selben Pfad.

12voto

Ahmad Alsabbagh Punkte 226

Hier sind einige Fälle, in denen die Verwendung von Regex helfen kann:

  • \W für jedes beliebige Zeichen außer Wortzeichen [a-zA-Z0-9_] . Beispiel:

    ("Hello World,I-am code").split(/\W+/); // would return [ 'Hello', 'World', 'I', 'am', 'code' ]

  • \s+ für eine Übereinstimmung Ein oder mehrere Leerzeichen

  • \d um eine Ziffer zu finden

  • wenn Sie nur durch einige Zeichen trennen wollen, sagen wir , y - können Sie str.split(/[,-]+/) ...usw.

12voto

blockchainwtf Punkte 91

Ich bin erstaunt, dass es noch niemand vorgeschlagen hat, aber meine hack-ey (und verrückt schnell) Lösung war es, nur anhängen mehrere "ersetzen"-Aufrufe vor der Aufteilung durch das gleiche Zeichen.

d.h. a, b, c, d und e zu entfernen:

let str = 'afgbfgcfgdfgefg'
let array = str.replace('a','d').replace('b','d').replace('c','d').replace('e','d').split('d')

kann dies für ein Array von Verteilern wie folgt verallgemeinert werden:

function splitByMany( manyArgs, string ) {
  do {
    let arg = manyArgs.pop()
    string = string.replace(arg, manyArgs[0])
  } while (manyArgs.length > 2)
  return string.split(manyArgs[0])
}

In Ihrem Fall könnten Sie also Folgendes aufrufen

let array = splitByMany([" ", ","], 'My long string containing commas, and spaces, and more commas');

0 Stimmen

Das ist nicht wahnsinnig schnell

9voto

Stephen Sweriduk Punkte 257

Für diejenigen, die ihre Aufteilungsfunktion noch weiter anpassen wollen, habe ich einen rekursiven Algorithmus geschrieben, der eine gegebene Zeichenkette mit einer Liste von Zeichen aufteilt, an denen sie aufgeteilt werden soll. Ich habe das geschrieben, bevor ich den obigen Beitrag gesehen habe. Ich hoffe, es hilft einigen frustrierten Programmierern.

splitString = function(string, splitters) {
    var list = [string];
    for(var i=0, len=splitters.length; i<len; i++) {
        traverseList(list, splitters[i], 0);
    }
    return flatten(list);
}

traverseList = function(list, splitter, index) {
    if(list[index]) {
        if((list.constructor !== String) && (list[index].constructor === String))
            (list[index] != list[index].split(splitter)) ? list[index] = list[index].split(splitter) : null;
        (list[index].constructor === Array) ? traverseList(list[index], splitter, 0) : null;
        (list.constructor === Array) ? traverseList(list, splitter, index+1) : null;    
    }
}

flatten = function(arr) {
    return arr.reduce(function(acc, val) {
        return acc.concat(val.constructor === Array ? flatten(val) : val);
    },[]);
}

var stringToSplit = "people and_other/things";
var splitList = [" ", "_", "/"];
splitString(stringToSplit, splitList);

Das obige Beispiel ergibt: ["people", "and", "other", "things"]

Nota: flatten Funktion wurde übernommen von Rosetta-Code

8voto

PeterKA Punkte 22489

Sie können einfach alle Zeichen, die Sie als Trennzeichen verwenden wollen, entweder einzeln oder zusammen in einen regulären Ausdruck packen und an die Split-Funktion übergeben. Zum Beispiel könnten Sie schreiben:

console.log( "dasdnk asd, (naks) :d skldma".split(/[ \(,\)]+/) );

Und die Ausgabe wird sein:

["dasdnk", "asd", "naks", ":d", "skldma"]

7voto

JanuszO Punkte 1000

Meine Überarbeitung der Antwort von @Brian

var string = 'and this is some kind of information and another text and simple and some egample or red or text';
var separators = ['and', 'or'];

function splitMulti(str, separators){
            var tempChar = 't3mp'; //prevent short text separator in split down

            //split by regex e.g. \b(or|and)\b
            var re = new RegExp('\\b(' + separators.join('|') + ')\\b' , "g");
            str = str.replace(re, tempChar).split(tempChar);

            // trim & remove empty
            return str.map(el => el.trim()).filter(el => el.length > 0);
}

console.log(splitMulti(string, separators))

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