Sie können so etwas tun:
"1234567890".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "90"]
Die Methode funktioniert weiterhin mit Zeichenfolgen, deren Größe kein genaues Vielfaches der Blockgröße ist:
"123456789".match(/.{1,2}/g);
// Results in:
["12", "34", "56", "78", "9"]
Im Allgemeinen würden Sie für jede Zeichenfolge, aus der Sie höchstens Teilzeichenfolgen mit n Größen extrahieren möchten, Folgendes tun:
str.match(/.{1,n}/g); // Replace n with the size of the substring
Wenn Ihre Zeichenfolge Zeilenumbrüche oder Zeilenumbrüche enthalten kann, gehen Sie wie folgt vor:
str.match(/(.|[\r\n]){1,n}/g); // Replace n with the size of the substring
Was die Leistung angeht, habe ich dies mit ungefähr 10.000 Zeichen ausprobiert und es hat in Chrome etwas mehr als eine Sekunde gedauert. YMMV.
Dies kann auch in einer wiederverwendbaren Funktion verwendet werden:
function chunkString(str, length) {
return str.match(new RegExp('.{1,' + length + '}', 'g'));
}
.
stimmt überhaupt nicht mit Zeilenumbruch überein. Ich werde die Antwort aktualisieren , so dass es dauert\n
und\r
zu berücksichtigen.var chunks = str.split("").reverse().join().match(/.{1, 4}/).map(function(s) { return s.split("").reverse().join(); });
. Dies geschieht in 4er-Stücken. Ich bin mir nicht sicher, was Sie unter "weniger oder mehr" verstehen. Beachten Sie, dass dies im Allgemeinen nicht funktioniert, insbesondere bei Zeichenfolgen, die kombinierte Zeichen enthalten und auch Unicode-Zeichenfolgen beschädigen können.[^]
. Damit würde Ihr Beispiel zustr.match(/[^]{1,n}/g)
Ich habe mehrere schnellere Varianten erstellt, die Sie auf jsPerf sehen können . Mein Favorit ist:
quelle
Math.ceil()
, um die richtige Anzahl von Stücken zu bestimmen.match
,slice
,substr
undsubstring
match
undslice
für verschiedene Blockgrößenmatch
undslice
mit kleiner BlockgrößeEndeffekt:
match
ist sehr ineffizient,slice
ist besser, auf Firefoxsubstr
/substring
ist noch bessermatch
ist für kurze Zeichenfolgen noch ineffizienter (selbst bei zwischengespeicherten regulären Ausdrücken - wahrscheinlich aufgrund der Einrichtungszeit für die Analyse von regulären Ausdrücken)match
ist für große Chunks noch ineffizienter (wahrscheinlich aufgrund der Unfähigkeit zu "springen")match
übertrifft es denslice
älteren IE, verliert jedoch auf allen anderen Systemenquelle
Dies ist eine schnelle und unkomplizierte Lösung -
quelle
substr()
anstelle von verwendensubstring()
.Überraschung! Sie können split verwenden, um zu teilen.
Ergebnisse in
[ '12', '34', '56', '78', '90', ' ' ]
quelle
filter (o=>o)
?filter(x=>x)
wird verwendet, um diese leeren Elementequelle
Ich habe eine erweiterte Funktion geschrieben, daher kann die Blocklänge auch ein Array von Zahlen sein, wie [1,3]
Der Code
wird zurückkehren:
quelle
Es teilt die große Zeichenfolge in kleine Zeichenfolgen bestimmter Wörter auf .
quelle
quelle
Ich würde einen regulären Ausdruck verwenden ...
quelle
Nennen Sie es nach Bedarf
quelle
Hier ist eine Lösung, die ich nach ein wenig Experimentieren für Vorlagenzeichenfolgen gefunden habe:
Verwendung:
quelle
Sie können
reduce()
ohne regulären Ausdruck verwenden:quelle
reduce
Methode liefern .In Form einer Prototypfunktion:
quelle
Hier ist der Code, den ich verwende, er verwendet String.prototype.slice .
Ja, es dauert ziemlich lange, bis eine Antwort vorliegt, da versucht wird, den aktuellen Standards so nahe wie möglich zu kommen, und natürlich eine angemessene Anzahl von JSDOC- Kommentaren enthält. Einmal minimiert, beträgt der Code jedoch nur 828 Bytes und einmal für die Übertragung komprimiert sind es nur 497 Bytes.
Die 1-Methode, die hierdurch hinzugefügt wird
String.prototype
(unter Verwendung von Object.defineProperty , sofern verfügbar), ist:Eine Reihe von Tests wurde aufgenommen, um die Funktionalität zu überprüfen.
Befürchten Sie, dass die Länge des Codes die Leistung beeinträchtigt? Kein Grund zur Sorge, http://jsperf.com/chunk-string/3
Ein Großteil des zusätzlichen Codes dient dazu, sicherzustellen, dass der Code in mehreren Javascript-Umgebungen gleich reagiert.
quelle
Verwenden der Slice () -Methode:
Das gleiche kann mit der Methode substring () gemacht werden.
quelle
Mein Problem mit der obigen Lösung ist, dass sie die Zeichenfolge unabhängig von der Position in den Sätzen in Stücke von formaler Größe zerlegt.
Ich halte das Folgende für einen besseren Ansatz; obwohl es einige Leistungsverbesserungen erfordert:
quelle
Sie können definitiv so etwas tun
um dies zu bekommen:
Wenn Sie die Blockgröße dynamisch eingeben / anpassen möchten, sodass die Blockgröße n beträgt, können Sie Folgendes tun:
Versuchen Sie Folgendes, um alle möglichen Chunks der Größe n in der Originalzeichenfolge zu finden:
Sie sollten am Ende haben mit:
quelle
quelle
Was ist mit diesem kleinen Code:
quelle
quelle