判断一个字符串中出现次数最多的字符,并统计次数以及\1代表的意思

判断一个字符串中出现次数最多的字符,并统计次数

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

你可能感兴趣的:(正则表达式)