wrap en JavaScript simple

Necesitaba cortar un base64 en varias lineas de tamaño fijo, y busqué una función de wrap en google, pero me encontré con funciones complicadas, muchas transformaban el string a un array y hacián slices. Como sé de expresiones regulares me dije a mi mismo, tiene que haber una forma mas simple!, así que hice mi propia función:

const wrap = function (str, count, cut = "\n") {
    var c = parseInt(count), r = new RegExp(`.{1,${c}}`, 'g');
    return str.match(r).join(cut);
};

Esta función hace uso de algunas características de ES6, así que pongo también la versión para ES5 (a.k.a browsers):

var wrap = function (str, count, cut) {
    var c = parseInt(count).toString(10),
        r = new RegExp(".{1," + count + "}", 'g');

    cut = cut || "\n";

    return str.match(r).join(cut);
};

Se puede también extender el prototype del objeto Stringcon esta función:

String.prototype.wrap = function (count, cut) {
    var c = parseInt(count).toString(10),
        r = new RegExp(".{1," + count + "}", 'g');

    cut = cut || "\n";

    return this.match(r).join(cut);
};

De esta forma lo podremos usar en cualquier parte del código y de forma natural:

("Hola mundo, esto es un string").wrap(3);
/*
    Hol
    a m
    und
    o, 
    est
    o e
    s u
    n s
    tri
    ng
*/

Hace un tiempo también hice una similar para arrays, espero que les sirva.

Como funciona

Antes de irme voy a poner como funciona esto.

    var c = parseInt(count).toString(10),
        r = new RegExp(".{1," + count + "}", 'g');

c es simplemente count casteado a string, el parseInt es por si viene un valor en float o en string, luego lo que hago es crear una expresión regular que quedaría así *(suponiendo que count sea 10):

/.{1,10}/g

Pero que es esta expresión regular?, en expresiones regulares . significa cualquier cosa. sea un cadena que contenga caracteres alfanuméricos, numéricos, espacios, etc. Y {1,10} quiere decir que tiene que tener desde 1 caracter hasta 10 de largo, lo que hará que se encuentren como resultados válidos todos los bloques de 10 caracteres, si se puede, o de por lo menos 1. El modificador g hace que la búsqueda sea global, por lo que devolverá todos los resultados (en nuestro caso todos los bloques de caracteres de 10 caracteres máximo), al encontrar el primer resultado, el motor de expresiones regulares seguirá con el siguiente.

Luego str.match(r) correrá la expresión regular sobre nuestro string, devolviendo un array de resultados, y el .join(cut) los volverá a unificar usando el caracter de unificación elegido, que por defecto \n sería un salto de linea.