How can I split a string into segments of n characters?
If you didn't want to use a regular expression...
var chunks = [];
for (var i = 0, charsLength = str.length; i < charsLength; i += 3) {
chunks.push(str.substring(i, i + 3));
}
jsFiddle.
...otherwise the regex solution is pretty good :)
var str = 'abcdefghijkl';
console.log(str.match(/.{1,3}/g));
Note: Use {1,3}
instead of just {3}
to include the remainder for string lengths that aren't a multiple of 3, e.g:
console.log("abcd".match(/.{1,3}/g)); // ["abc", "d"]
A couple more subtleties:
- If your string may contain newlines (which you want to count as a character rather than splitting the string), then the
.
won't capture those. Use/[\s\S]{1,3}/
instead. (Thanks @Mike). - If your string is empty, then
match()
will returnnull
when you may be expecting an empty array. Protect against this by appending|| []
.
So you may end up with:
var str = 'abcdef \t\r\nghijkl';
var parts = str.match(/[\s\S]{1,3}/g) || [];
console.log(parts);
console.log(''.match(/[\s\S]{1,3}/g) || []);