2014-02-24 38 views
10

我想通過一次或多次出現的字母拆分字符串。JavaScript拆分字符串多次出現的字母

例如:

aaabbcapppp,將產生陣列,["aaa", "bb", "c", "a", "pppp"]

最低效的想法我是剛剛使用,newArray = str.split("");和陣列重建我的需要。我假設有一個更有效的解決方案。

+1

看看在http:// stackoverflow.com/questions/18170955/get-duplicate-characters-in-string – juvian

回答

18

像這樣的東西會工作:

"aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"] 

(.)匹配任何單個字符,在第1組抓獲,隨後是相同的字符重複零次或多次(\1爲向後引用該匹配什麼被匹配在組1)。

只匹配拉丁字母,可以考慮使用[a-z],例如:

"aaa-bbca!!pppp".match(/([a-z])\1*/g) // ["aaa", "bb", "c", "a", "pppp"] 

這裏,-!!不包括在結果陣列英寸

1

正則表達式的解決方案可能是要走的路,但如果由於某種原因,你想要做手工,像這樣的工作

function charSplit(str) { 
    var arr = [], l, j = -1; 
    for (var i=0; i<str.length; i++) { 
     var c = str.charAt(i); 
     l==c ? arr[j] += c : arr[++j] = c; 
     l=c; 
    } 
    return arr; 
} 

FIDDLE

+0

+1似乎可以通過查找運行中第一個字符和最後一個字符的索引,然後執行子字符串而不是串聯來改進。我喜歡它。 –

+0

@ p.s.w.g - 感謝您+1。是的,它可能會得到改善,但這很簡單,我甚至可以把它縮小 - > http://jsfiddle.net/MJQM8/1/ – adeneo

相關問題