Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中,用逗号|分号在n-max-size块中拆分大字符串_Javascript_Regex_Split_Match - Fatal编程技术网

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

在JavaScript中,用逗号|分号在n-max-size块中拆分大字符串,javascript,regex,split,match,Javascript,Regex,Split,Match,我想用逗号|分号将一个大字符串拆分为n个最大大小的块 非常接近我的情况,但我真正想要的是用逗号|分号拆分,并限制n_max_大小 我的情况:使用文本到语音服务将文本转换为语音,但由于服务提供商的限制,每个请求最多有100个单词的限制,因此我必须将一篇文章拆分为几个子字符串。如果我把它分成固定的n大小,声音的停顿/音调就不同于人类 在性能方面,什么是最好的方法呢?从评论中我了解到,您不希望在每个逗号或分号处进行拆分,但只有在即将达到最大大小时才进行拆分。此外,您还希望在结果中保留分隔符(拆分处的逗

我想用逗号|分号将一个大字符串拆分为n个最大大小的块

非常接近我的情况,但我真正想要的是用逗号|分号拆分,并限制n_max_大小

我的情况:使用文本到语音服务将文本转换为语音,但由于服务提供商的限制,每个请求最多有100个单词的限制,因此我必须将一篇文章拆分为几个子字符串。如果我把它分成固定的n大小,声音的停顿/音调就不同于人类


在性能方面,什么是最好的方法呢?

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

要向正则表达式添加最大大小限制,可以使用类似于
{1100}
的正则表达式,其中100是最大值(例如)。如果您的引擎不支持(尚未),请使用
[^]
而不是
,以确保此处甚至匹配换行符

要确保拆分正好发生在分隔符之后,请将
(.$|[,;])
添加到正则表达式中,并将前面的
{1100}
减少到
{1,99}

然后是在100个或更多字符的子字符串中没有分隔符的情况:下面的代码将选择例外地允许更长的块,直到找到分隔符为止。您可能还需要添加空白(
\s
)作为可能的分隔符

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

constmysplit=(s,maxSize=s.length)=>s.match(新的RegExp((?=\\s)([^]{1,+(maxSize-1)+“}|[^,;]*)(.$|[,;]),“g”);

log(mySplit(“您好,这是一个没有逗号的较长句子;但没问题”,20))您将对每个块执行什么处理?如果该处理不那么琐碎,那么拆分的性能可能就没有那么重要了。不管怎样,您当前的尝试(代码)是什么,还有什么不起作用?先解决问题,然后再优化。@trincot我只是更新了我的问题。@Frieder是的,没错,我已经解决了问题,但现在想做得更好。:)如果你有一个有效的解决方案,并且对效率有疑问,那么这个问题更适合你。但是,如果你没有完全按照你想要的方式工作的代码,那么请分享你的代码并描述它所存在的问题。非常感谢。但是如何使每个分割尽可能接近最大尺寸?你说的“尽可能接近”是什么意思?你是说它可能是一个比maxSize更大的块吗?此解决方案永远不会超过maxSize,但会在该大小内获得最大的块。我以为这就是“
n\u max\u size
limit”中的“max”的意思;-)这是我的测试文本春雪等不来青青杨柳, 留一抹清寒落在枝头; 四月的风足够温柔, 却化不开夜色里浓重的愁; 时光它走啊走, 停在石板路的尽头; 是同岁月纠缠的无止无休,和故事里永远不会少的二两老酒; 大雨把心思都淋透, 假装看不见这世界有多丑; 梦里哼着小曲儿的你容颜依旧温柔, 随天地逍遥游游,慢舸轻舟.', 通过
mySplit(text,100)
获得结果
'['春雪等不来青青杨柳', '留一抹清寒落在枝头','四月的风足够温柔','却化不开夜色里浓重的愁','时光它走啊走','停在石板路的尽头','是同岁月纠缠的无止无休','和故事里永远不会少的二两老酒','大雨把心思都淋透','假装看不见这世界有多丑','梦里哼着小曲儿的你容颜依旧温柔','随天地逍遥游游,慢舸轻舟.' ]'但我期望
['春雪等不来青青杨柳, 留一抹清寒落在枝头; 四月的风足够温柔, 却化不开夜色里浓重的愁; 时光它走啊走, 停在石板路的尽头; 是同岁月纠缠的无止无休,和故事里永远不会少的二两老酒; ’,   ‘大雨把心思都淋透, 假装看不见这世界有多丑; 梦里哼着小曲儿的你容颜依旧温柔, 随天地逍遥游游,慢舸轻舟.’]两段,第一段长度为92,接近
Max
。我误解了你的问题。我已经更新了我的答案。