Wie der Titel schon sagt, habe ich eine Zeichenfolge und möchte mich in Segmente mit n Zeichen aufteilen .
Beispielsweise:
var str = 'abcdefghijkl';
Nach etwas Magie mit n=3
wird es
var arr = ['abc','def','ghi','jkl'];
Gibt es eine Möglichkeit, dies zu tun?
[\s\S]
stattdessen,.
um bei Zeilenumbrüchen nicht zu versagen.''.match(/.{1,3}/g)
und das''.match(/.{3}/g)
Rücknull
anstelle eines leeren Array.Wenn Sie keinen regulären Ausdruck verwenden möchten ...
jsFiddle .
... sonst ist die Regex-Lösung ziemlich gut :)
quelle
3
Variable vom OP vorgeschlagen wird. Es ist besser lesbar als eine Regexp-Zeichenfolge zu verketten.quelle
3
mir aber kehrtnull
mit zurück250
. 🤔Aufbauend auf den vorherigen Antworten auf diese Frage; Die folgende Funktion teilt eine Zeichenfolge (
str
) n-Anzahl (size
) von Zeichen.Demo
quelle
Meine Lösung (ES6-Syntax):
Wir könnten sogar eine Funktion damit erstellen:
Dann können Sie die Funktion einfach und wiederverwendbar aufrufen:
Prost
quelle
Saubere Lösung ohne REGEX
quelle
Die obige Funktion verwende ich für Base64-Chunking. Es wird ein Zeilenumbruch von jeweils 75 Zeichen erstellt.
quelle
replace(/.{1,75}/g, '$&\n')
.Hier durchsetzen wir alle n Zeichen eine Zeichenfolge mit einer anderen Zeichenfolge:
wenn wir das obige wie folgt verwenden:
wir bekommen:
und hier machen wir dasselbe, aber drücken auf ein Array:
und dann ausführen:
wir bekommen:
Wenn jemand eine Möglichkeit kennt, den obigen Code zu vereinfachen, lmk, aber es sollte gut für Zeichenfolgen funktionieren.
quelle
Eine saubere Lösung ohne reguläre Ausdrücke:
Anwendungsbeispiel - https://jsfiddle.net/maciejsikora/b6xppj4q/ .
Ich habe auch versucht, meine Lösung mit einer regulären zu vergleichen, die als richtige Antwort ausgewählt wurde. Einige Tests finden Sie auf jsfiddle - https://jsfiddle.net/maciejsikora/2envahrk/ . Tests zeigen, dass beide Methoden eine ähnliche Leistung haben. Vielleicht ist die Regexp-Lösung auf den ersten Blick etwas schneller, aber beurteilen Sie es selbst.
quelle
Mit
.split
:und
.replace
wird sein:/(?!$)/
ist vor dem Ende anzuhalten/$/
, ohne ist:Gruppe ignorieren
/(?:
...)/
ist nicht erforderlich,.replace
aber in.split
fügt Gruppen zu arr hinzu:quelle
Hier ist eine Möglichkeit, dies ohne reguläre Ausdrücke oder explizite Schleifen zu tun, obwohl dadurch die Definition eines Einzeilers ein wenig erweitert wird:
Es funktioniert, indem die Zeichenfolge in ein Array einzelner Zeichen aufgeteilt und dann
Array.reduce
über jedes Zeichen iteriert wird. Normalerweisereduce
würde ein einzelner Wert zurückgegeben, aber in diesem Fall ist der einzelne Wert zufällig ein Array, und wenn wir über jedes Zeichen gehen, hängen wir es an das letzte Element in diesem Array an. Sobald das letzte Element im Array die Ziellänge erreicht hat, fügen wir ein neues Arrayelement hinzu.quelle
Kommen wir etwas später zur Diskussion, aber hier eine Variation, die etwas schneller ist als die Teilzeichenfolge + Array Push One.
Die Vorberechnung des Endwerts als Teil der for-Schleife ist schneller als die Inline-Berechnung innerhalb des Teilstrings. Ich habe es sowohl in Firefox als auch in Chrome getestet und beide zeigen eine Beschleunigung.
Sie können es hier versuchen
quelle