Wenn ich es versuche
"my, tags are, in here".split(" ,")
Ich verstehe folgendes
[ 'my, tags are, in here' ]
Während ich will
['my', 'tags', 'are', 'in', 'here']
javascript
Hoa
quelle
quelle
"my, tags are, in here".split(" ,")
Teilt die Zeichenfolge nur dort, wo ein Leerzeichen gefolgt von einem Komma das Trennzeichen ist. Ihre Zeichenfolge enthält diese Sequenz nicht, daher wird sie nicht aufgeteilt."my, tags are, in here".split(", ")
Wenn Sie die Teilungssequenz vertauschen, wird Ihre ursprüngliche Zeichenfolge nach jedem Komma und Leerzeichen mindestens in drei Teile geteilt. Wenn Sie fünf Teile möchten, geben die folgenden Antworten die Übereinstimmungszeichenfolge als regulären Ausdruck an, der mit einem Leerzeichen oder einem Komma übereinstimmt .Antworten:
String.split
kann auch einen regulären Ausdruck akzeptieren:Dieser bestimmte reguläre Ausdruck wird in eine Folge von einem oder mehreren Kommas oder Leerzeichen aufgeteilt, sodass z. B. mehrere aufeinanderfolgende Leerzeichen oder eine Komma + Leerzeichenfolge keine leeren Elemente in den Ergebnissen erzeugen.
quelle
/,?\s+/
?spaces , before commas
.\s
. Ich habe möglicherweise einige Zeilenumbrüche im Blob und\s
kümmere mich auch darum.input.split("/[ ,]+/)"
. Lassen Sie die Anführungszeichen weg (input.split(//)
stattinput.split("//")
) und Sie werden eine viel bessere Erfahrung haben. Denn seltsamerweise würde das wirklich wahrscheinlich nur an sich selbst funktionieren (zu generieren["input.split(\"", ")\""]
).Der zu verwendende Vorschlag
.split(/[ ,]+/)
ist gut, aber mit natürlichen Sätzen erhalten Sie früher oder später leere Elemente im Array. zB['foo', '', 'bar']
.Was in Ordnung ist, wenn das für Ihren Anwendungsfall in Ordnung ist. Aber wenn Sie die leeren Elemente loswerden möchten, können Sie Folgendes tun:
quelle
Boolean()
Konstruktor für einen Wert aufgerufen wird, wandelt er diesen Wert in einen Booleschen Wert um - true oder false. Daher werden alle falschen Werte aus dem Array gefiltert, einschließlich leerer Zeichenfolgen.[1, 2, 3].map(String)
"foo, bar,,foobar,".split(/[\s,]+/)
kehrt zurück["foo", "bar", "foobar", ""]
(wegen des baumelnden Kommas am Ende), danke!Sie können Regex verwenden, um eine beliebige Länge des Leerraums zu erfassen. Dies wäre wie folgt:
quelle
/\s+/
. Zum Beispiel'a b c '.split(/\s+/) === [ 'a', 'b', 'c', '' ]
. Wenn Sie.trim()
die Zeichenfolge zuerst, werden Sie gut sein.Das Ergebnis ist :
quelle
input.split(/\s*[\s,]\s*/)
…
\s*
Entspricht null oder mehr Leerzeichen (nicht nur Leerzeichen, sondern auch Tabulatoren und Zeilenumbrüche)....
[\s,]
entspricht einem Leerzeichen oder einem KommaWenn Sie leere Elemente aus Eingaben wie vermeiden möchten
"foo,bar,,foobar"
, reicht dies aus:input.split(/(\s*,?\s*)+/)
Das
+
entspricht einem oder mehreren der vorhergehenden Zeichen oder Gruppen.Bearbeiten:
?
Nach einem Komma hinzugefügt, das mit null oder einem Komma übereinstimmt.Bearbeiten 2:
Es stellte sich heraus, dass Bearbeitung 1 ein Fehler war. Behoben. Jetzt muss mindestens ein Komma oder ein Leerzeichen vorhanden sein, damit der Ausdruck eine Übereinstimmung findet.
quelle
"foo,bar,foobar".split(/[ ,]+/)
kehrt["foo", "bar", "foobar"]
ebenfalls zurück.Wenn ich zusätzliche Zeichen wie Ihre Kommas berücksichtigen möchte (in meinem Fall kann jedes Token mit Anführungszeichen eingegeben werden), würde ich einen string.replace () ausführen, um die anderen Trennzeichen in Leerzeichen zu ändern und dann in Leerzeichen aufzuteilen.
quelle
str_variable.replace(/[,'"]+/gi, ' ').split(' ')