按长度分解字符串,保留单词

时间:2017-02-18 15:31:28

标签: javascript arrays string

使用javascript,我想将一个任意长度的字符串分解为最多80个字符的段。需要注意的是,我不想打断文字。例如,我目前正在使用此处列出的方法Split large string in n-size chunks in JavaScript

var dialog_array = dialog_to_load.match(/.{1,80}/g);

问题是,从第76个字符开始到第84个字符结束的单词将被分成两半。是否有一些简洁的正则表达式或代码来防止这种情况?

为了澄清,我能够写一个小函数来实现这个目标,我只是想知道是否有一个干净,更时尚的方式。

字符串将具有任意长度和内容,但这是请求时的示例:

  

Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua。 Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat。 Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur。 Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum。

2 个答案:

答案 0 :(得分:2)

如何使用例如/.{1,80}\b/g尊重字边界?

答案 1 :(得分:0)

您可以使用此正则表达式:

/\S.{1,79}(?=$|\s)/g

\S确保一行以非空格开头。因此,.{1,79}中的计数需要少一个。通过前瞻(?=,可以确保匹配在前方有空白区域或字符串末尾($)时停止。

match()一起使用时,您可以按要求获取行,并在发生换行的位置删除空格。

下面的代码段使用50作为宽度而不是80,因此效果很好:



var s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
var res = s.match(/\S.{1,49}(?=$|\s)/g);
console.log(res);

.as-console-wrapper { max-height: 100% !important; top: 0; }