在JavaScript中将包含多个段落的字符串分成两半

在JavaScript中将包含多个段落的字符串分成两半,javascript,Javascript,我有字符串文本,我想打破。我需要通过Facebook messenger聊天API发送它,但该API只允许640个字符,我的文本要长得多。我想要一个简洁的解决方案,我可以用它来发送文本 我想把包含多个段落的字符串分成两半,直到最近的句号 乙二醇 var结果=[]; var start=0; 对于(var i=640;ivar results=[]; var start=0; 对于(var i=640;i将此作为基础: let slices = [], s; for(let i = 0; s =

我有字符串文本,我想打破。我需要通过Facebook messenger聊天API发送它,但该API只允许640个字符,我的文本要长得多。我想要一个简洁的解决方案,我可以用它来发送文本

我想把包含多个段落的字符串分成两半,直到最近的句号

乙二醇

var结果=[];
var start=0;
对于(var i=640;i
var results=[];
var start=0;

对于(var i=640;i将此作为基础:

let slices = [], s;
for(let i = 0; s = a.slice(i * 640, (i+1) *  640); i++)
    slices.push(s);
slices数组将包含640个字符的文本块。但我们希望它具有空间意识。我们需要找到尽可能接近640个字符的句子结尾,而不超过它。如果我们希望具有空间意识,这将使我们的生活更容易处理整个句子而不是字符:

// EDIT: Now, if a sentence is less than 640 chars, it will be stored as a whole in sentences
// Otherwise, it will be stored in sequential 640-char chunks with the last chunk being up to 640 chars and containing the period.
// This tweak also fixes the periods being stripped
let sentences = str.match(/([^.]{0,639}\.|[^.]{0,640})/g)
下面是一个快速演示的讨厌的正则表达式:

现在我们一次最多可以创建640个字符的结果

let result = ''
sentences.forEach(sentence=> {
    if((result + sentence).length <= 640) result += sentence;
    else {
        API.send(result);
        // EDIT: realized sentence would be skipped so changed '' to sentence
        result = sentence;
    }
})
let result=''
句子。forEach(句子=>{

如果((结果+句子)。长度将此作为基础:

let slices = [], s;
for(let i = 0; s = a.slice(i * 640, (i+1) *  640); i++)
    slices.push(s);
slices数组将包含640个字符的文本块。但我们希望它具有空间意识。我们需要找到尽可能接近640个字符的句子结尾,而不超过它。如果我们希望具有空间意识,这将使我们的生活更容易处理整个句子而不是字符:

// EDIT: Now, if a sentence is less than 640 chars, it will be stored as a whole in sentences
// Otherwise, it will be stored in sequential 640-char chunks with the last chunk being up to 640 chars and containing the period.
// This tweak also fixes the periods being stripped
let sentences = str.match(/([^.]{0,639}\.|[^.]{0,640})/g)
下面是一个快速演示的讨厌的正则表达式:

现在我们一次最多可以创建640个字符的结果

let result = ''
sentences.forEach(sentence=> {
    if((result + sentence).length <= 640) result += sentence;
    else {
        API.send(result);
        // EDIT: realized sentence would be skipped so changed '' to sentence
        result = sentence;
    }
})
let result=''
句子。forEach(句子=>{

如果((结果+句子)看640个字符,再往回看…看640个字符,再往回看…你明白了。我刚刚意识到,如果任何句子的长度超过640个字符,你会有奇怪的行为,所以请记住。最后的句子呢?例如,如果有1626个字符。只有前1280个会被发送。其他的呢?对这个问题有什么帮助吗?正在制定解决方案。一旦开始工作,就会发布一个编辑。你知道了。我刚刚意识到,如果任何句子的长度超过640个字符,你会有奇怪的行为,所以请记住。最后的句子呢?例如,如果有1626个字符。只有前1280个字符会被发送。其他的呢?这个问题有什么帮助吗?正在制定解决方案。一旦成功,将发布编辑。