Нетривиальный способ: добавлять исходный текст в элемент по одному слову, и смотреть за высотой элемента. Как только она скакнула – началась новая строка.
Примерно так:
var $el = $('h1');
var s = $el.text().split(/\s+/);
var i, h = {curr:0, prev:0}, parts = [], word, back=[];
while(s.length) {
word = s.shift();
back.push(word);
$el.html( back.join(' '));
h.curr = $el.height();
if( h.curr !== h.prev) {
parts.push([]);
h.prev = h.curr;
}
parts[ parts.length - 1].push(word);
}
parts = parts.map((e,i) => '<span class="row'+i+'">' + e.join(' ') + '</span>');
$el.html(parts.join("\n"));
CodePen