我需要在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次,并在一个组中捕获它.*$
-之后捕获字符串末尾的所有内容(或下一个换行符(