JavaScript通过多次出现的字母拆分字符串
我试图用一个或多个字母来拆分字符串 例如:JavaScript通过多次出现的字母拆分字符串,javascript,regex,string,split,Javascript,Regex,String,Split,我试图用一个或多个字母来拆分字符串 例如: aaabbcappp将生成数组,[“aaa”、“bb”、“c”、“a”、“pppp”] 我最低效的想法就是利用,newArray=str.split(“”)并根据我的需要重建阵列。我认为有一个更有效的解决方案。类似的解决方案可以: "aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"] ()匹配组1中捕获的任何单个字符,然后该字符重复零次或多次(\1是一个反向引用,它与组1中
aaabbcappp
将生成数组,[“aaa”、“bb”、“c”、“a”、“pppp”]
我最低效的想法就是利用,
newArray=str.split(“”)
并根据我的需要重建阵列。我认为有一个更有效的解决方案。类似的解决方案可以:
"aaabbcapppp".match(/(.)\1*/g) // ["aaa", "bb", "c", "a", "pppp"]
()
匹配组1中捕获的任何单个字符,然后该字符重复零次或多次(\1
是一个反向引用,它与组1中匹配的字符完全匹配)
仅匹配拉丁字母,考虑使用<代码> [AZ] < /代码>,例如:
"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;
}
函数charSplit(str){
var arr=[],l,j=-1;
对于(var i=0;我看一下+1似乎可以通过查找运行中第一个和最后一个字符的索引,然后执行子字符串而不是串联来改进。不过我很喜欢它。@p.s.w.g-谢谢,+1谢谢你。是的,它可能可以改进,但这很简单,我甚至为了好玩而缩小了它->