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.
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.
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.
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');
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
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"]
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 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.
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.