Wie teile ich eine Zeichenfolge mit mehreren Trennzeichen in JavaScript? Ich versuche, sowohl Kommas als auch Leerzeichen aufzuteilen, aber AFAIK, JS 'Aufteilungsfunktion unterstützt nur ein Trennzeichen.
javascript
regex
split
Mikemaccana
quelle
quelle
Antworten:
Übergeben Sie einen regulären Ausdruck als Parameter:
Bearbeitet, um hinzuzufügen:
Sie können das letzte Element erhalten, indem Sie die Länge des Arrays minus 1 auswählen:
... und wenn das Muster nicht übereinstimmt:
quelle
(hello world)|\|
davon haben noch nicht ganz funktioniert. Irgendwelche Ideen?Sie können einen regulären Ausdruck an den Split-Operator von Javascript übergeben . Zum Beispiel:
Oder wenn Sie zulassen möchten, dass mehrere Trennzeichen zusammen als ein Trennzeichen fungieren:
(Sie müssen die nicht erfassenden (? :) Parens verwenden, da sie sonst wieder in das Ergebnis eingefügt werden. Oder Sie können wie Aaron schlau sein und eine Charakterklasse verwenden.)
(Beispiele in Safari + FF getestet)
quelle
|
wie Jesse zeigt.Eine andere einfache, aber effektive Methode ist die wiederholte Verwendung von split + join.
Im Wesentlichen ist ein Split gefolgt von einem Join wie ein globales Ersetzen, sodass jedes Trennzeichen durch ein Komma ersetzt wird. Sobald alle ersetzt sind, wird ein endgültiges Teilen durch Komma durchgeführt
Das Ergebnis des obigen Ausdrucks ist:
Wenn Sie dies erweitern, können Sie es auch in eine Funktion einfügen:
Verwendungszweck:
Wenn Sie diese Funktionalität häufig verwenden, lohnt es sich möglicherweise sogar, eine Umhüllung in Betracht zu ziehen
String.prototype.split
Einfachheit zu ziehen (ich denke, meine Funktion ist ziemlich sicher - die einzige Überlegung ist der zusätzliche Aufwand für die Bedingungen (geringfügig) und die Tatsache, dass das Limit-Argument nicht implementiert ist wenn ein Array übergeben wird).Stellen Sie sicher, dass Sie die
splitMulti
Funktion einschließen , wenn Sie diesen Ansatz wie folgt verwenden: Schließen Sie ihn einfach ein :). Es ist auch erwähnenswert, dass einige Leute die Erweiterung von integrierten Funktionen missbilligen (da viele Leute es falsch machen und Konflikte auftreten können). Wenn Sie Zweifel haben, sprechen Sie mit einer älteren Person, bevor Sie dies verwenden, oder fragen Sie nach SO :)Verwendungszweck:
Genießen!
quelle
for(var i = 0; i < tokens.length; i++)
und nichtfor(var i = 1; i < tokens.length; i++)
?tokens[1]
, eine Iteration zu speichern,tokens[0] == tempchar
und wir teilen unstempchar
nach der Iteration auftokens
, um den Vorgang abzuschließen . Ich werde die Antwort entsprechend aktualisieren, danke @tic :).Lassen Sie es uns einfach halten: (Fügen Sie Ihrem RegEx ein "[] +" hinzu, was "1 oder mehr" bedeutet)
Dies bedeutet, dass "+" und "{1,}" gleich sind.
quelle
Tricky Methode:
quelle
:/
'('
für ändern/(/g
, um alle(
Elemente zu ersetzen -g
ist das globale Flag für RegExp - so sucht es nach allen Vorkommen von(
nicht erstenFür diejenigen unter Ihnen, die mehr Anpassungsmöglichkeiten in ihrer Aufteilungsfunktion wünschen, habe ich einen rekursiven Algorithmus geschrieben, der eine bestimmte Zeichenfolge mit einer Liste von Zeichen aufteilt, auf die aufgeteilt werden soll. Ich habe das geschrieben, bevor ich den obigen Beitrag gesehen habe. Ich hoffe, es hilft einigen frustrierten Programmierern.
Beispiel oben gibt zurück:
["people", "and", "other", "things"]
Hinweis: Die
flatten
Funktion wurde aus dem Rosetta-Code übernommenquelle
Sie können einfach alle Zeichen, die Sie als Trennzeichen verwenden möchten, einzeln oder gemeinsam zu einem regulären Ausdruck zusammenfassen und an die Teilungsfunktion übergeben. Zum Beispiel könnten Sie schreiben:
Und die Ausgabe wird sein:
quelle
Vielleicht sollten Sie eine Art Zeichenfolgen ersetzen, um ein Trennzeichen in das andere zu trennen, damit Sie dann nur ein Trennzeichen in Ihrem Split haben.
quelle
Hallo zum Beispiel, wenn Sie in String 07:05:45 PM geteilt und ersetzt haben
Ergebnis
quelle
Hier ist ein neuer Weg, um dasselbe in ES6 zu erreichen :
Bitte beachten Sie in dieser Funktion:
source
Das Ergebnis des obigen Codes wäre:
quelle
Dadurch wird die Zeichenfolge ohne ein spezielles Zeichen zurückgegeben.
quelle
Mein Refaktor von @Brian antwortet
quelle
Ich finde, dass einer der Hauptgründe, warum ich dies brauche, darin besteht, Dateipfade auf beiden
/
und zu teilen\
. Es ist ein bisschen knifflig, also werde ich es hier als Referenz posten:quelle
Ich denke, es ist einfacher, wenn Sie angeben, was Sie verlassen möchten, anstatt was Sie entfernen möchten.
Als ob Sie nur englische Wörter haben möchten, können Sie Folgendes verwenden:
Beispiele (Snippet ausführen):
quelle
Ausgehend von der @ stephen-sweriduk-Lösung (das war für mich interessanter!) Habe ich sie leicht modifiziert, um sie allgemeiner und wiederverwendbarer zu machen:
und dann
das gibt als original zurück:
quelle
Code-Snippet anzeigen
quelle
Ich werde eine klassische Implementierung für eine solche Funktion bereitstellen. Der Code funktioniert in fast allen Versionen von JavaScript und ist irgendwie optimal.
Nur reiner Code:
Sie können den Code auf dem Spielplatz sehen: https://codeguppy.com/code.html?IJI0E4OGnkyTZnoszAzf
quelle
Ich kenne die Leistung von RegEx nicht, aber hier ist eine weitere Alternative für RegEx, die natives HashSet nutzt und stattdessen in O-Komplexität (max (str.length, delimeter.length)) arbeitet:
quelle
Nicht der beste Weg, aber funktioniert mit mehreren und verschiedenen Trennzeichen / Trennzeichen
html
Javascript
quelle
Ich benutze Regexp:
quelle