【问题标题】:cut text after 15 full words javascript在 15 个完整单词后剪切文本 javascript
【发布时间】:2023-04-09 13:17:02
【问题描述】:

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

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

解决方案示例

【问题讨论】:

  • 请提供一些您所做的代码。
  • 请参阅stackoverflow.com/help/how-to-ask。您需要努力并针对您的代码提出具体问题。
  • 您基本上是在问如何将句子分割成单词(以及如何将其重新组合在一起)。答案是 String.split() (和 Array.join())
  • 如果有多个后续空格String.split(' ') 将不起作用

标签: javascript regex for-loop truncate


【解决方案1】:

你可以拆分、截断然后加入

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

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

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

【讨论】:

  • 如果两个单词之间有多个空格,String.split ('') 将不起作用
【解决方案2】:

您可以使用匹配空格后跟一个或多个非空格字符的正则表达式 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 次,并将其捕获在一个组中
  • .*$ - 之后将所有内容捕获到字符串末尾(或下一个换行符)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多