在 15 个完整单词后剪切文本 javascript

cut text after 15 full words javascript

我需要在 js 中的 15 个单词后剪切一些文本,我尝试这样做但似乎只能找到基于一定数量的字符而不是完整单词的解决方案

function shorten(str, maxLen, separator = ' ') {
    if (str.length <= maxLen) return str;
    return str.substr(0, str.lastIndexOf(separator, maxLen));
}

解决方案示例

您可以拆分、截断然后合并

function shorten(str, maxLen, separator = ' ') {
    if (str.length <= maxLen) return str;
    return str.split(separator).splice(0, maxLen).join(separator);
}

如果单词之间可以有多个空格,则可以使用正则表达式删除这些空格,然后 trim 删除开头和结尾的空格。

function shorten(str, maxLen) {
    if (str.length <= maxLen) return str;
    const trimmed_str = str.replace(/ {1,}/g," ").trim();
    return trimmed_str.split(' ').splice(0, maxLen).join(' ');
}

您可以使用匹配 space 后跟一个或多个非 space 字符的正则表达式 15 次:

let text = 'w1 w2 w3 w4 w5 w6 w7 w8 w9 w10' +
    ' w11 w12 w13 w14 w15 w16 w17 w18 w19 w20';
let regex = /^(( *[^ ]+){15}).*$/;
let result = text.replace(regex, '');
console.log('text:   "' + text + '"');
console.log('result: "' + result + '"');

输出:

text:   "w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15 w16 w17 w18 w19 w20"
result: "w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14 w15"

解释:

  • ^ - 开头的锚字符串
  • ( *[^ ]+) - 期望可选的 spaces,后跟 1+ 个非 space 字符
  • ((...){15}) - 期待前面括号中的匹配出现 15 次,并将其捕获到一个组中
  • .*$ - 之后捕获所有内容到字符串结尾(或下一个换行符)