JSFiddle - React, Tailwind, and code Playground

JavaScript

const string = 'stackoverflow';

function subString(str, nr) {
    const parts = [];
    for (let i = 0, length = str.length; i < length; i += nr) {
        parts.push(str.substring(i, i + nr));
    }
    return parts;
}

function pushLoop(str, nr) {
    const chars = str.split('');
    let temp = [];
    let parts = [];
    for (let char of chars) {
        temp.push(char);
        if (temp.length == nr) {
            parts.push(temp.join(''));
            temp = [];
        }
    }
    if (temp.length) parts.push(temp.join(''));
    return parts;
}

const splitStr = (str, size) => {
  const length = Math.ceil(str.length / size);
  return Array.from({ length }, (_, i) => (i *= size, str.substring(i, i + size)))
}

function match(string, nr) {
    let regex = new RegExp(`.{1,${4}}`, 'g');
    return string.match(/.{1,3}/g);
}


function tester(fn, str, nr) {
    let start = Date.now();
    return new Promise(resolve => {
        let res;
        for (let i = 0; i < 100000; i++) {
            res = fn.call(null, str, nr);
        }
        resolve(Date.now() - start);
    });
}
let names = ['match', 'pushloop', 'substring', 'splitStr'];
Promise.all([match, pushLoop, subString, splitStr].map(fn => tester(fn, string, 3))).then(results => {
    results.forEach((res, i) => {
        console.log(names[i], res, 'ms')
    });
});