2011-05-30 62 views
2

var myStr="AAAAAAA BBBBB CCCCC DDDDD...",这个字符串可以有不同长度的包含空格的单词。如何切割字符串?如果我有一个字符串例如

我想要一个将字符串分配到数组中的函数,也就是将字符串切割为数组中的元素, 其中数组的每个元素都包含字符串中的单词,总长度(包括单词之间的空格)少于10个字符长。

(数组的每个元素总是包含完整的单词之间&空间,而不是削减从中间字)

我想:

var words=myStr.split(' '); 

然后....什么是有效的方式,实行?

+0

你的意思是不再话会被瓜分,或从最终阵列排除? – 2011-05-30 07:41:29

+0

是的,更长的单词将被切片,但总是由单词之间的空格分开,数组中每个元素的总长度不应超过10个字符长。 – Leem 2011-05-30 07:42:20

+1

拆分是实现您想要的正确方法 - 出了什么问题? – 2011-05-30 07:45:11

回答

0
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); 
    } 
} 
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."] 
+0

是否允许正则表达式? – metaforce 2011-05-30 07:44:58

+0

@metaforce:是的确如此:[在MDC文档上分割](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/String/split) – 2011-05-30 07:47:06

1

尝试:

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

(从头部,未测试)

+0

不,这不符合我的要求,例如,如果myStr ='AAA BB',你的函数将给出结果[“AAA”,“BB”],但是对于这种情况,结果应该是[“AAA BB “],因为长度超过10个字符长度 – Leem 2011-05-30 07:47:45

+0

试试这个正则表达式模式:/(\ s){10}/g – metaforce 2011-05-30 07:51:32

0

例如:

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:反映澄清要求

+0

另请注意:我认为在关于“包括空格”在十个字符的范围内。如果是这样,一个简单的正则表达式就是'\ S {1,10}',它将匹配任何最多十个非空格字符序列。 – 2011-05-30 07:56:10

+0

由于'AAAAAA BBBB'为11个字符,所以OP希望''AAA BB''被分割为'[“AAA BB”],但是“AAAAAA BBBB”为'[“AAAAAA”,“BBBB”]。 – 2011-05-30 09:07:11