按句子截断文本分割

hen*_*per 5 javascript reduce typescript

我想按句子截断文本。

示例文本:'Lorem ipsum dolor sat amet, consectetur adipiscing elit!Ut vehicula laoreet urna, commodo vulputate massa luctus in. Sed volutpat nunc vitae urna auctor, at tempus enim rhoncus。Arcu mattis commodo 的 Morbi 演员?Morbi in ornare arcu, sagittis scelerisque risus。Aenean lobortis lacinia nisl, nec laoreet ipsum viverra ac. Praesent venenatis eleifend risus et pulvinar。Sed vitae nulla sed purus ultrices mattis。Nulla facilisi。

这就是我到目前为止所拥有的:

const truncate = (text: string, limit: number) => {
  const reduced = text
    .split(/[?!\.]/)
    .reduce((acc, cur) => {
      acc = (acc + cur).length < limit? `${acc}. ${cur}` : acc;
      return acc;
    });
 return reduced.length > limit? reduced.slice(limit - 3) + '...' : reduced;
};
console.log(truncate(text, 300));
Run Code Online (Sandbox Code Playgroud)

问题是它总是放点而不是以前的实际标点符号,有时它甚至在最后放点。

这里举几个例子:

限制:50

1 个句子的长度为 24 // 24

2 个句子的长度为 20 // 44 <- 停在这里

3 个句子的长度为 24 // 68

另外我的代码没有用标点符号计算句子长度,但我想我可以添加 1.

编辑

限制:70 输出:“Lorem ipsum dolor sat amet,consectetur adipiscing elit!”

限制:40 输出:“Lorem ipsum dolor sat amet, consectet...”

限制:220 输出:“Lorem ipsum dolor sat amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut laboure et dolore magna aliqua?”

限制:240 输出:“Lorem ipsum dolor sat amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut laboure et dolore magna aliqua?Ut enim ad minim veniam,quis nostrud exeritation ullamcolaboris nisi ut eaquatse commod.”