javascript substr символы без подсчета пробелов - PullRequest
0 голосов
/ 26 августа 2018

У меня есть текстовое описание с css

white-space: pre-wrap;

, и оно включает пробелы и новые строки и т. Д. *

Я хотел бы ограничить количество символов в описании без подсчета пробелов:

description = description.substr(0,100);

Конечно, мне нужно сохранить форматирование описания.

Как я могу это сделать?

Ответы [ 5 ]

0 голосов
/ 27 августа 2018

Я использую библиотеку countable.js, чтобы сделать это, и ее жизнь, между прочим, рассчитывается по скучным кликам.

Все, что вам нужно, это добавить его на html-страницу в виде ссылки javascript

<script src="https://cdnjs.cloudflare.com/ajax/libs/countable/3.0.1/Countable.js"></script>

Вот ссылка для скачивания countable.js

https://github.com/RadLikeWhoa/Countable

и вот пример того, что он может сделать

https://sacha.me/Countable/

и вот ссылка на реализованный пример:

https://www.jqueryscript.net/form/Simple-Live-Character-Counter-with-Javascript-Countable.html

Это так просто в использовании, вам просто нужно добавить счетчик рядом с элементом, который вы хотите считать, проверить опции, чтобы избежать пробелов, точек, запятых и так далее.

Надеюсь, мой пост поможет вам

Удачи

0 голосов
/ 27 августа 2018

Может быть, это решит вашу проблему:

let description = "Lorem Ipsum Dolor Sit Amet Consectetur Adipisicing Elit Sed Do Eiusmod Tempor Incididunt Ut Labore Et Dolore Magna Ali";
let spaceCount = ((description || '').match(/\s+/g) || []).length;
let description1 = description.substr(0, 100 + spaceCount);
// OR
let description2 = description.substr(0, 100 - spaceCount);
console.log(description1, description2)
0 голосов
/ 26 августа 2018

Другим способом без регулярного выражения является подсчет числа после удаления пробела

description.replace(' ', '').substr(0, 100)

0 голосов
/ 26 августа 2018

Попробуйте эту функцию.Это возвращает точно желаемое значение:

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));
0 голосов
/ 26 августа 2018

Вам нужно перебрать все символы строки и сосчитать все символы, которые не являются пробелами (или каким бы шаблоном вы ни хотели), и как только вы достигнете предела, вы знаете, где нужно урезать строку:

var description = '1 2 3 4 5 6 7 8 9 10 11 12 13 14'

function limitLength(str, length, exclude) {
  var i = 0
  for (var count = 0 ; i < str.length && count < length; i++) {
    if (!str[i].match(exclude)) {
      count++
    }
  }
  
  return str.substr(0, i)
}

description = limitLength(description, 15, /([\s])/)

console.log(description)
...