在Javascript中的截断词后截断字符串

时间:2019-03-08 18:31:44

标签: javascript

我想在javascript中某些字符长度后截断字符串。当达到字符长度时,不应在单词中间切入字符串,而应将单词补全,然后截断字符串。 我尝试过的直到现在都在切割词之前切割了字符串。我想在返回的字符串中包含切割词。这是我的代码:

function truncateString(yourString, maxLength) {
  var trimmedString = yourString.substr(0, maxLength);
  trimmedString = trimmedString.substr(0, Math.min(trimmedString.length, trimmedString.lastIndexOf(" ")));
  return trimmedString;
}

现在,当我使用以下参数调用此函数时:

truncateString('The quick brown fox jumps over the lazy dog',6)

输出为'The' rather than 'The quick

请指出我需要更改的内容。 谢谢

5 个答案:

答案 0 :(得分:5)

您可以使用indexOf的第二个参数来搜索maxLength之后的立即空间索引

function truncateString(yourString, maxLength) {
  // get the index of space after maxLength
  const index = yourString.indexOf(" ", maxLength);
  return index === -1 ? yourString : yourString.substring(0, index)
}

const str = 'The quick brown fox jumps over the lazy dog';

console.log(truncateString(str,6))
console.log(truncateString(str,10))
console.log(truncateString(str,100))

答案 1 :(得分:2)

一种选择是使用正则表达式。

您可以基于传递给函数的值来构建正则表达式模式。

$ java -version

java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
Cristians-MacBook-Air:~ fa$ 

^.{${value}}.*?\\b
       |     |_____________ expression to get value upto next word boundry
       |
       |___________________ Value passed to function

答案 2 :(得分:1)

只要maxLength位于非空白字符上,请将其增加。

for _, site := range xwebsites {
        u, _ := url.Parse(site.URL)
        urlString := strings.ReplaceAll(u.Host, "www.", "")

        // So I'm thinking here I should handle the struct I created to store values 
        }

答案 3 :(得分:1)

在您的示例中:

trimmedString // "The qu"
trimmedString.length // 6
trimmedString.lastIndexOf(" ") // 3
Math.min(trimmedString.length, trimmedString.lastIndexOf(" ") // 3

因此,当前您转到当前单词之前的空格,而不是其后的空格。


这是一个潜在的解决方案:

  1. 通过找到在endIndex上或之后的第一个空格(" ")的索引来找到maxLength(请参见indexOf
  2. 返回在endIndex之前结束的子字符串

答案 4 :(得分:0)

您可以使用reduce函数来实现。在总长度未达到时添加一个单词。

function truncateString(yourString,maxLength)
{
   return yourString.split(' ').reduce((acc, str) => { return (acc.length < maxLength) ? acc + " " + str : acc  }, '')
}
console.log(truncateString('The quick brown fox jumps over the lazy dog',6))