我想在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
。
请指出我需要更改的内容。 谢谢
答案 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
因此,当前您转到当前单词之前的空格,而不是其后的空格。
这是一个潜在的解决方案:
endIndex
上或之后的第一个空格(" "
)的索引来找到maxLength
(请参见indexOf
)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))