我想通過一次或多次出現的字母拆分字符串。JavaScript拆分字符串多次出現的字母
例如:
aaabbcapppp
,將產生陣列,["aaa", "bb", "c", "a", "pppp"]
最低效的想法我是剛剛使用,newArray = str.split("");
和陣列重建我的需要。我假設有一個更有效的解決方案。
我想通過一次或多次出現的字母拆分字符串。JavaScript拆分字符串多次出現的字母
例如:
aaabbcapppp
,將產生陣列,["aaa", "bb", "c", "a", "pppp"]
最低效的想法我是剛剛使用,newArray = str.split("");
和陣列重建我的需要。我假設有一個更有效的解決方案。
像這樣的東西會工作:
"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"]
這裏,-
和!!
不包括在結果陣列英寸
正則表達式的解決方案可能是要走的路,但如果由於某種原因,你想要做手工,像這樣的工作
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;
}
+1似乎可以通過查找運行中第一個字符和最後一個字符的索引,然後執行子字符串而不是串聯來改進。我喜歡它。 –
@ p.s.w.g - 感謝您+1。是的,它可能會得到改善,但這很簡單,我甚至可以把它縮小 - > http://jsfiddle.net/MJQM8/1/ – adeneo
看看在http:// stackoverflow.com/questions/18170955/get-duplicate-characters-in-string – juvian