【问题标题】:How to cut the string?如何剪断绳子?
【发布时间】:2011-05-30 07:38:33
【问题描述】:

如果我有一个字符串,例如var myStr="AAAAAAA BBBBB CCCCC DDDDD...",这个字符串可以有各种长度,包含带空格的单词。

我想要一个函数,它将字符串分割成一个数组,即字符串将被分割为数组中的元素, 其中数组的每个元素都包含总长度(包括单词之间的空格)小于 10 个字符的字符串中的单词。

(数组的每个元素总是包含完整的单词和单词之间的空格,而不是从中间剪切单词)

我试过了:

var words=myStr.split(' ');

那么....什么是有效的实施方式?

【问题讨论】:

  • 你的意思是长词会被切分,还是从最终数组中排除?
  • 是的,较长的单词会被切分,但单词之间总是用空格隔开,数组中每个元素的总长度不应大于 10 个字符。
  • split 是实现您想要的正确方法 - 出了什么问题?
  • 最好向我们展示预期的输出,例如['AAAAAAA ', 'BBBBB CCCCC ' ...]。否则很难理解。

标签: javascript


【解决方案1】:

尝试:

var words = myStr.replace(/(\s)/g, ' ').split(' ');

(来自头部,未测试)

【讨论】:

  • 不,这不符合我的要求,例如,如果 myStr='AAA BB',你的函数会给出结果 ["AAA", "BB"],但是对于这种情况,结果应该是 ["AAA BB"],因为总长度小于 10 个字符
  • 试试这个正则表达式模式:/(\s){10}/g
【解决方案2】:
var words = "AAAAAAA BBBBB  CCCCC   DDDDD\tEEEE \t FFFF".split(/\s+/);

一旦有了单词,就可以遍历单词并将每个单词推入一个新数组,如下所示:

编辑#2

var words = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed vulputate, velit et luctus tristique, libero quam ornare ligula, sagittis consequat massa tellus vel nulla.".split(
  /\s+/
);
var output = [words[0]];
for (var i = 1; i < words.length; i++) {
  var word = words[i];
  var prev = output.pop();
  if ((prev + " " + word).length <= 10) {
    output.push(prev + " " + word);
  } else {
    output.push(prev);
    output.push(word);
  }
}
console.log(output);
// ["Lorem", "ipsum", "dolor sit", "amet,", "consectetur", "adipiscing", "elit. Sed", "vulputate,", "velit et", "luctus", "tristique,", "libero", "quam", "ornare", "ligula,", "sagittis", "consequat", "massa", "tellus vel", "nulla."]

【讨论】:

【解决方案3】:

例如:

var myStr = 'xxx yy wwwwww vvvv bbbbbbbbb cccccccccc a ddddddddddd eee';
var myArray = myStr.match(/.{1,10}(\s|$)|\S{1,10}(?!\s)/g);
for (var i in myArray) myArray[i] = myArray[i].replace(/\s+$/, '');
// myArray => [ 'xxx yy', 'wwwwww', 'vvvv', 'bbbbbbbbb', 'cccccccccc', 'a', 'dddddddddd', 'd eee' ]

2011-05-31 编辑:反映了明确的要求

【讨论】:

  • 另请注意:我认为关于十个字符限制中的“包括空格”的问题存在混淆。如果是这样,一个更简单的正则表达式将是\S{1,10},它将匹配最多十个非空格字符的任何序列。
  • OP 希望将"AAA BB" 拆分为["AAA BB"],但将"AAAAAA BBBB" 拆分为["AAAAAA", "BBBB"],因为AAAAAA BBBB 是11 个字符。
猜你喜欢
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多