Javascript:如何从字符串末尾删除标点符号

时间:2016-12-29 22:38:10

标签: javascript css string slice

免责声明:我是编程新手!我确实看过S.O.在发布之前找到这个问题的答案,但没有找到我需要的答案。

现在,我正在使用的API返回一个变量:'description'。 'description'是带有标点符号的动态,250个字符的字符串。

我必须将字符串截断为110个字符,然后在其后插入省略号。这很容易 - 我一直在使用类似的东西:

description.slice(0,110) + "..."

但是上面的问题是有问题的,因为我无法预测我的字符串将截断的字符。如果它在标点符号或空格上截断,结果看起来很愚蠢:

enter image description here

我一直在阅读很多类似的查询,开发人员想要知道如何在字符串末尾删除一个标点符号。但是我可能不得不取消几个标点字符,具体取决于变量返回多少标点符号或空格。

有人可以告诉我最好的方法吗?如果我可以提供任何其他信息,请告诉我。

3 个答案:

答案 0 :(得分:3)

根据我的评论,我会略微区别对待,以确保整个单词。



var string = "This is a sentence. A long sentence that should be broken up so it's not too long.  Got it?  Good.  How long. does it get?";

var excerpt = createExcerpt(string);
console.log(excerpt);

// Function to parse a sentence into an excerpt, based on whole words
function createExcerpt(string, maxLength) {
  // Set a default value of maxLength of 110
  maxLength = maxLength | 110;
  // If it's not too long, don't do anything
  if (string.length <= maxLength) {
    return string;
  }
  
  // Break it up into words
  var words = string.split(' ');
  var excerpt = '';
  // Loop over the words in order
  words.forEach(function(word) {
    // Build a test string to see if it's too long
    test = excerpt + ' ' + word;
    // If it's too long, then break out of the loop
    if (test.length > maxLength) {
      return false;
    }

    // Otherwise, set the excerpt to the new test string
    excerpt = test;
  });

  // Remove any extra spaces / dots at the end of the excerpt
  excerpt =  excerpt.replace(/[\s|\.]+$/i, '');
  // Return the excerpt with ellipses
  return excerpt + '...';
}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您可以使用修剪来删除末尾的额外空格:

var description = description.slice(0,110).trim(); //trim to remove spaces

然后添加条件以检查最后是否有一个点如果是,则添加另外两个其他添加三个标点:

if (description[description.length-1] === ".")
    description += '..';
else
    description += '...';

希望这有帮助。

&#13;
&#13;
var description = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";

description = description.slice(0,110).trim();

if (description[description.length-1] === ".")
    description += '..';
else
    description += '...';

console.log(description);
&#13;
&#13;
&#13;

.代码段和结尾处的空格:

&#13;
&#13;
var description = "Lorem ipsum dolor sit amet,consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore.  magna aliqua.";

description = description.slice(0,110).trim();

if (description[description.length-1] === ".")
    description += '..';
else
    description += '...';

console.log(description);
&#13;
&#13;
&#13;

答案 2 :(得分:1)

我认为这会奏效!

function truncateWholeWords (text, maxLength) {
    maxLength = maxLength || 110; 
    var length = 0;

    return text.split(' ').filter(function (word) {
        length += (word.length+1);
        return length <= maxLength;
    }).join(' ').replace(/([.,\/#!$%\^&\*;:{}=\-_`~()\]\[])+$/g, "") + '...';

}