分割字符串

/ 0评 / 0

遇到一个实际需求,有一段很长的文字,需要将其分割,怎么分割呢?
要满足每一行的长度(最后一行可以小于)都等于指定的长度,
这段文字是中英文混合的,所以规定一个中文字符长度为2,一个英文字符长度为1。
例如
示例文本:

这this是is一a段文字sentence。,。这this是is一a段文字sentence。,。这this是is一a段文字sentence。,。这this是is一a段文字sentence。,。这this是is一a段文字sentence。,。这this是is一a段文字sentence。,。

输出:
分割字符串
代码:

//分割文字,中英文混合,一个中文字符相当于两个英文字符,m为英文字母长度单位
function cutString(str, m) {
  var strList = [];
  var i, j = 0;
  var regexp = /[^\x00-\xff]/g;
  for (i = j; i < str.length; i++) {
    if (str.substring(j, i).replace(regexp, "aa").length >= m) {
      strList.push(str.substring(j, i));
      j = i;
    }
  }
  if (str.substring(j, i).replace(regexp, "aa").length <= m) {
    strList.push(str.substring(j, i));
  }
  return strList;
}

纯英文情况下:

//分割纯英文字符,此方法好处是避免把一个单词切成两半,m为一行所能容纳最多字母数,标题m为31,摘要m为40
function cutEnglishStr(str, m) {
  m += 1;
  var list = str.split(" ");
  var strlist = [];
  var index = 0;
  while (index < list.length) {
    var tempStr = "";
    var i = 0;
    while (tempStr.length < m && index + i < list.length) {
      if ((tempStr + list[index + i] + " ").length > m) {
        break;
      } else {
        tempStr = tempStr + list[index + i] + " ";
        i++;
      }
    }
    index = index + i;
    strlist.push(tempStr.substring(0, tempStr.length - 1)); //去掉每行最后一个空格
    // console.log(tempStr.length, m);
  }
  return strlist
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注