Wenn ich versuche,Wie kann ich eine JavaScript-Zeichenfolge durch Leerzeichen oder Komma trennen?
"my, tags are, in here".split(" ,")
ich die folgende
[ 'my, tags are, in here' ]
Während ich will
['my', 'tags', 'are', 'in', 'here']
Wenn ich versuche,Wie kann ich eine JavaScript-Zeichenfolge durch Leerzeichen oder Komma trennen?
"my, tags are, in here".split(" ,")
ich die folgende
[ 'my, tags are, in here' ]
Während ich will
['my', 'tags', 'are', 'in', 'here']
String.split
kann auch einen regulären Ausdruck annehmen:
input.split(/[ ,]+/);
Dieser spezielle Regex teilt sich in einer Folge von einem oder mehreren Kommas oder Leerzeichen auf, so dass z.B. Mehrere aufeinanderfolgende Leerzeichen oder eine Komma + Leerzeichen-Sequenz erzeugen keine leeren Elemente in den Ergebnissen.
Was ist mit '/,? \ S + /'? – Bergi
Das funktioniert auch. – gabitzish
@Bergi: Nun, es ist sowohl strenger als das, was ich vorschlage (nur ein Komma erlaubt, vorne) als auch lockerer (auf alle Leerzeichen aufgeteilt) als das, was das OP verlangt hat. IMHO wäre es einfach schlechter - beachte die Eingabe 'Leerzeichen, vor Kommas '. – Jon
"my, tags are, in here".split(/[ ,]+/)
das Ergebnis:
["my", "tags", "are", "in", "here"]
input.split(/\s*[\s,]\s*/)
... \s*
Streichhölzer null oder mehr Leerzeichen (nicht nur Räume, sondern auch Tabs und Zeilenumbrüche).
... [\s,]
entspricht ein weißes Leerzeichen oder ein Komma
Wenn Sie leere Elemente von Eingabe wie "foo,bar,,foobar"
vermeiden wollen, dies den Trick tun wird:
input.split(/(\s*,?\s*)+/)
Die +
Streichhölzer ein oder mehrere der vorhergehenden Zeichen oder Gruppen.
Edit:
Added ?
hinter dem Komma, die Null oder Eins Komma entspricht.
Edit 2:
Es stellte sich heraus bearbeiten 1 ein Fehler war. Behoben. Jetzt muss mindestens ein Komma oder ein Leerzeichen vorhanden sein, damit der Ausdruck eine Übereinstimmung findet.
Nop. Das ist nicht gut. Dies ist die Ausgabe: ["my", "tags sind", "hier"] – gabitzish
Es sollte jetzt behoben werden. – KaptajnKold
scheint es sich auf jedes Zeichen zu teilen. – Marco
Wenn ich zusätzliche Zeichen wie Kommas berücksichtigen möchte (in meinem Fall kann jedes Token mit Anführungszeichen eingegeben werden), würde ich eine string.replace() verwenden, um die anderen Trennzeichen in Leerzeichen zu ändern und dann zu teilen Leerzeichen.
Der Vorschlag, .split(/[ ,]+/)
zu verwenden, ist gut, aber mit natürlichen Sätzen früher oder später erhalten Sie leere Elemente im Array. z.B. ['foo', '', 'bar']
.
Was ist in Ordnung, wenn das für Ihren Anwendungsfall in Ordnung ist. Aber wenn man die Beseitigung der leeren Elemente erhalten möchten, können Sie tun:
var str = 'whatever your text is...';
str.split(/[ ,]+/).filter(Boolean);
Das ist eine sehr clevere Verwendung von impliziten Konstruktoren nativen Objekts - meine Computer-Tastatur ist heute Morgen verrückt - ich werde diesen Kommentar später bearbeiten - aber Punkt ruft Boolean auf wie 'Boolean()' wird eine neue Instanz von [Objekt Boolean] mit erstellen ein Wert von false, genau wie das Aufrufen von 'new Boolean()'. Dadurch werden alle Übereinstimmungen bis auf dieses Standardverhalten herausgefiltert. Nice one :) – VLostBoy
danke! Ich habe herausgefunden, dass es ein sehr nützlicher Trick ist. – jonschlinkert
was genau meinst du mit "natürlichen Sätzen"? Ich konnte es nicht nachahmen, noch verstehe ich, was das tun soll. – cregox
Sie regex verwenden können, um eine beliebige Länge von Leerraum zu fangen, und dies wäre wie:
var text = "hoi how are you";
var arr = text.split(/\s+/);
console.log(arr) will result :
["hoi", "how", "are", "you"]
console.log(arr[2]) will result :
"are"
don‘ meinst du whitespace * oder * komma? – KaptajnKold
Als Erklärung für das Ergebnis, das Sie bekommen: '" meine, Tags sind, hier drin ".split (", ")' wird die Zeichenfolge nur dort teilen, wo ein Leerzeichen _durch ein Komma als Trennzeichen folgt. Ihre Zeichenfolge enthält diese Sequenz nicht, daher wird sie nicht aufgeteilt. '" meine, Tags sind, in hier ".split (", ")' mit der Splitting-Sequenz vertauscht wird mindestens Ihre ursprüngliche Zeichenfolge in drei Teile, nach jedem Komma und Leerzeichen. Wenn Sie fünf Teile haben möchten, geben die Antworten unten die Übereinstimmungszeichenfolge als regulären Ausdruck an, der einem Leerzeichen oder einem Komma entspricht. –