Javascript:如何去掉字符串末尾的标点符号

Javascript: how to remove punctuation from the end of a string

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

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

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

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

但以上是有问题的,因为我无法预测我的字符串将截断到哪个字符。如果它在标点符号或白色 space 处截断,结果看起来真的很傻:

我读过很多类似的咨询,开发人员想知道如何去掉字符串末尾的一个标点符号。但是我可能不得不去掉几个标点符号,这取决于变量返回了多少标点符号或白色 space。

谁能告诉我解决这个问题的最佳方法?如果我可以提供任何其他信息,请告诉我。

您可以使用 trim 删除末尾的多余空格:

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

然后添加一个条件来检查末尾是否有一个点,如果是,则添加另外两个,否则添加三个标点符号:

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

希望这对您有所帮助。

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);

带有 . 且末尾有空格的代码段:

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);

根据我的评论,我会稍微不同地处理它,以确保完整的话。

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 + '...';
}

我认为这会奏效!

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, "") + '...';

}