Попробуйте эту функцию.Это возвращает точно желаемое значение:
function mySubstr(a/*description*/, c/*count*/){
var l=0, dif=0, p=c,
dt=[a.substr(0, c)];
while((l=dt.join("").replace(/\s/g, "").length)<c){
dt.push(a.substr(p, dif=c-l));
p+=dif;
}
return dt.join("");
}
console.log(mySubstr("1 2 $- 8 58 9&8 85 0j g fg hc 6 4 34 8", 16));
результат проверки онлайн!
Добавленная часть (method2 - обновленная версия) :
Вы можете попробовать это.Эта версия также поддерживает multi \s
:
function Substr2(desc, c/*count*/){
var r="", s=0, m=0, res, ok;
desc.replace(/(.+?)(\s+)/g, function(a,b,d){
if(ok) return;
m+=b.length;
r+=a;
res=r.substr(0, m+s-(m-c));
if(m>=c) ok=1;
s+=d.length;
});
return res;
};
console.log(Substr2("1 2 $- 8 58 9&8 85 0j g fg hc 6 4 34 8", 16));