剪切15个完整单词后的文本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);
}

在这种情况下,如果单词之间可以有多个空格,那么可以使用regex删除这些空格,然后修剪以删除开头和结尾的空格。

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(' ');
}

您可以使用正则表达式匹配一个空格,后跟一个或多个非空格字符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, '$1');
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"

说明:

  • ^-开始时的锚定字符串
  • ( *[^ ]+)-应为可选空格,后跟1个以上非空格字符
  • ((...){15})-在括号中预期前面的匹配15次,并在一个组中捕获它
  • .*$-之后捕获字符串末尾的所有内容(或下一个换行符(

最新更新