Split string at space after certain number of characters in Javascript

A short and simple way to split a string into chunks up to a certain length using a regexp:

const chunks = str.match(/.{1,154}(?:\s|$)/g);

some examples:

const str="the quick brown fox jumps over the lazy dog";

console.log(str.match(/.{1,10}(?:\s|$)/g))
console.log(str.match(/.{1,15}(?:\s|$)/g))

This works because quantifiers (in this case {1,154}) are by default greedy and will attempt to match as many characters as they can. putting the (\s|$) behind the .{1,154} forces the match to terminate on a whitespace character or the end of the string. So .{1,154}(\s|$) will match up to 154 characters followed by a whitespace character. The /g modifier then makes it continue to match through the entire string.

To put this in the context of your function:

function splitText() {
    "use strict";
    var str = document.getElementById("user_input").value;
    var chunks = str.match(/.{1,154}(?:\s|$)/g);

    chunks.forEach(function (i,x) {
        $("#display").append("<textarea readonly>" + chunks[x] + "</textarea><br/>");
    });
}

Note (as has been pointed out in the comments) that this code will fail if one of the words in the string is longer than the length of the chunks.

Note also that this code will leave a trailing space on the end of the split strings; if you want to avoid that change the last group to a lookahead and insist that the first character not be whitespace:

const str="the quick brown fox jumps over the lazy dog";

console.log(str.match(/\S.{1,9}(?=\s|$)/g))
console.log(str.match(/\S.{1,14}(?=\s|$)/g))

Leave a Comment

tech