2011-10-15 38 views
3

我想达成什么是分裂像这样的字符串,即分隔符在哪里该索引之前的字符是从指数之后的字符不同的索引:如何通过作为分隔符的字符差异来分割字符串?

"AAABBCCCCDEEE" -> ["AAA", "BB", "CCCC", "D", "EEE"] 

我一直在努力编写一个简洁的解决方案,但我最终得到了这个相当详细的代码:http://jsfiddle.net/b39aM/1/

var arr = [],    // output 
    text = "AAABBCCCCDEEE", // input 
    current; 

for(var i = 0; i < text.length; i++) { 
    var char = text[i]; 

    if(char !== current) { // new letter 
     arr.push(char); // create new array element 
     current = char; // update current 
    } else {       // current letter continued 
     arr[arr.length - 1] += char; // append letter to last element 
    } 
} 

这是幼稚的,我不喜欢它:

  • 我手动遍历每个角色,而我的角色附加到阵列字符
  • 这是一个有点太长期为我想实现的简单的事情

我想使用正则表达式,但我不知道什么正则表达式应该是。是否可以定义一个正则表达式,意思是“一个字符和另一个字符跟随”?

或者更一般地说,是否有一个更优雅的解决方案来实现这种分割方法?

回答

6

是的,你可以使用正则表达式:

"AAABBCCCCDEEE".match(/(.)\1*/g) 

这里.将匹配任何字符和\1*将匹配任何下列字符是一样的前身匹配之一。在全球比赛中,您将获得所有匹配的序列。

+0

你刚刚做了一个忍者编辑添加'g'修饰符? – NullUserException

+0

@NullUserExceptionఠ_ఠ不。我刚刚在最初发布后添加了解释。 – Gumbo

相关问题