判断一个字符串中出现次数最多的字符,并统计次数
var s = 'aaaaacccccbbbbb';
var a = s.split('');
a.sort();
s = a.join('');
var pattern = /(\w)\1*/g; ==> 这里\1是什么意思?如果不写这个会怎样?
var ans = s.match(pattern);
ans.sort(function(a, b) {
return a.length < b.length;
});;
console.log(ans[0][0] + ': ' + ans[0].length);
有\1的情况下ans的值为:
["aaaaa","bbbbb","ccccc"]
没有\1的情况下ans的值为:
["aaaaabbbbbccccc"]
如果是\2或者\3呢?
ans值为:["a","a","a","a","a","b","b","b","b","b","c","c","c","c","c"]
正则表达式中的小括号"()"。是代表分组的意思。 如果再其后面出现\1则是代表与第一个小括号中要匹配的内容相同。
注意:\1必须与小括号配合使用
示例:
1、'aaaaacccccdebbbbb'.match(/\w/); -》["a"] // \w是单词字符
2、'aaaaacccccdebbbbb'.match(/(\w)/); -》["a", "a"] // match()方法会返回子表达式的值,第一个
"a":目标文本,第二个"a":子表达式的文本值
'aaaaacccccdebbbbb'.match(/(\w)\1/); -》["aa", "a"] // 第二个"a":子表达式的文本值,\1表示与a相同的内容即也是a,也即是匹配两个相同的字符。
3、'aaaaacccccdebbbbb'.match(/(\w)\1*/);-》["aaaaa", "a"] //匹配与字母a相同的任意个字符,当没有相同的字符时,它会返回匹配到的第一个单词字符。
3.1 'accccdebbbbb'.match(/(\w)\1*/); -》 ["a", "a", index: 0, input: "accccdebbbbb"]
4、'aaaaacccccdebbbbb'.match(/(\w)\1*/g);-》["aaaaa", "ccccc", "d", "e", "bbbbb"] // 全局匹配字符串中相同的字符
4.1 'accdebbb'.match(/(\w)\1*/g);-》["a", "cc", "d", "e", "bbb"]
'accdebbb'.match(/(\w)\1+/g);-》 ["cc", "bbb"] //(\w)\1*和(\w)\1+的区别在于前者:选定某个字符,后面可以有0个和它自身一样的字符也可以有任意多个;后面:当选定字符后后面必须有一个或者任意多个字符和它一样,至少从重复度从2开始
5 /(\d{3}-)\1\d{4}/.test("800-555-1212");-》false
/(\d{3}-)\1\d{4}/.test("800-800-1212");-》true