function wordwrap( str, int_width, str_break, cut ) { // Wraps a string to a given number of characters
//
// + original by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
// + improved by: Nick Callen
var i, j, s, r = str.split("\n");
if(int_width > 0) for(i in r){
for(s = r[i], r[i] = ""; s.length > int_width;
j = cut ? int_width : (j = s.substr(0, int_width).match(/\S*$/)).input.length - j[0].length || int_width,
r[i] += s.substr(0, j) + ((s = s.substr(j)).length ? str_break : "")
);
r[i] += s;
}
return r.join("\n");
}
Мало того, что cut отключить нельзя
wordwrap(" \t abc \r\t\t\tc b c bab\r \r\nbacabc", 3, '\n', false) .replace(/[\t\n\r]/g, m => { return {'\t': '\\t', '\n': '\\n\n', '\r': '\\r'}[m]; });Так и вывод
\t \n
\n
\n
abc\n
\r\t\n
\t\t\n
c \n
b \n
c \n
\n
bab\n
\r \r\n
bac\n
abc
отличается от выхлопа похапешной функции:
Для проверки:
\t \n
\n
abc\n
\r\t\t\tc\n
b \n
c \n
bab\r\n
\r\n
bacabc
Вот рабочая функция:
function wordwrap(text, width = 80, br = '\n', cut = false) { // Приводим к uint width >>>= 0; return text.split('\n').map(line => { if (!width && line.length <= width) { return line; } // Так бы можно было сделать, если бы не было cut // const words = line.split(' '); const words = []; let start = 0; for (;;) { let pos = text.indexOf(' ', start); let end = pos === -1 ? text.length : pos; if (cut && end - start > width) { while (start < end) { words.push(text.slice(start, Math.min(start + width, end))); start += width; } } else { words.push(text.slice(start, end)); } if (pos === -1) { break; } start = end + 1; } // console.log(words); let wrapped = words[0]; let spaceLeft = width - wrapped.length; for (let i = 1, length = words.length; i < length; ++i) { if (words[i].length + 1 > spaceLeft) { wrapped += br + words[i]; spaceLeft = width - words[i].length; } else { wrapped += ' ' + words[i]; spaceLeft -= 1 + words[i].length; } } return wrapped; }).join('\n'); }Лежать она будет тут, если модифицию, то сможете найти более свежую версию по ссылке:
https://github.com/tz4678/Advanced-JavaScript/blob/master/wordwrap.js