繁体   English   中英

用逗号|分号在 JavaScript 中的 n-max-size 块中分割大字符串

[英]Split large string by comma|semicolon in n-max-size chunks in JavaScript

我想用逗号|分号将一个大字符串分割成 n-max-size 块。

这个类似的问题非常接近我的情况,但我真正想要的是用逗号|分号分割,有n_max_size限制。

我的情况:使用 Text-to-Speech 服务将文本翻译成语音,但由于服务提供商的限制,每个请求最多 100 字限制,所以我不得不将一篇文章拆分为几个子字符串。 如果我只是将其拆分为固定的 n 大小,则声音的停顿/语气与人类不同。

就性能而言,这样做的最佳方法是什么?

从评论中我了解到您不想在每个逗号或分号处拆分,而仅在即将达到最大大小时才拆分。 您还希望在结果中保留分隔符(您分隔的逗号或分号)。

要将最大大小限制添加到正则表达式,您可以使用像.{1,100}这样的正则表达式,其中 100 是最大值(例如)。 如果您的引擎不支持dotAll 标志(尚),则使用[^]而不是. 以确保即使是换行符也在这里匹配。

为确保拆分发生分隔符之后,请将(.$|[,;])到正则表达式,并将之前的{1,100}减少到{1,99}

然后是 100 个或更多字符的子字符串中没有分隔符的情况:以下代码将选择然后异常允许更长的块,直到找到分隔符。 您可能还想添加空格 ( \\s ) 作为可能的分隔符。

这是一个将大小作为参数并创建相应正则表达式的函数:

 const mySplit = (s, maxSize=s.length) => s.match(new RegExp("(?=\\\\S)([^]{1," + (maxSize-1) + "}|[^,;]*)(.$|[,;])", "g")); console.log(mySplit("hello,this is a longer sentence without commas;but no problem", 20));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM