在Javascript中查找单词中重复字母的最大数量

时间:2015-10-22 05:04:39

标签: javascript regex

如何使用正则表达式在 JavaScript 中查找单词中重复字母的最大数字?  重复的字母可以与其他字母分开,例如"备忘录":' m'与'分开。 例如:"最伟大的"应该返回2导致' e'或者' t'重复两次,两次重复最多次。 我尝试过类似/([a-z]{1,})\1/的模式,但它不适合这种情况。 提前谢谢。

3 个答案:

答案 0 :(得分:3)

以下是实现此目的的javascript方式。无法使用正则表达式执行此操作。

var exp = 'hello world' ;
var expCounts = {};
var maxKey = '';
for(var i = 0; i < exp.length; i++) {
    var key = exp[i];
    if(!expCounts[key]){
     expCounts[key] = 0;
    }
    expCounts[key]++;
    if(maxKey == '' || expCounts[key] > expCounts[maxKey]){
        maxKey = key;
    }
}

console.log(maxKey + ":" + expCounts[maxKey]);    //logs l:3

的jsfiddle

https://jsfiddle.net/v72qa872/

答案 1 :(得分:2)

以下是使用JavaScript执行此操作的另一种方法:

function greatestRepeat(str) {
    var maxRepeat = 0;
    var letterRepeated = null;
    for(var i=0; i<str.length; i++) {
    	var currentLetter = str.charAt(i);
        var timesRepeated = str.split(currentLetter).length-1;
        if(timesRepeated > maxRepeat) {
            maxRepeat = timesRepeated;
            letterRepeated = currentLetter;
        }
    }
    return letterRepeated;
}
console.log(greatestRepeat("memo"));

正如我在评论中提到的,这不能仅仅用正则表达式来完成。正如 @MillieSmith 所述,这是因为常规语言不受上下文限制。

答案 2 :(得分:2)

  

如何使用正则表达式在JavaScript中查找单词中最大数量的重复字母?

你不能,除非你愿意限制最大重复次数,在这种情况下你可以用以下方法来做:

regexp = /(?:.*(.)(?:.*\1){2})|(?:.*(.)(?:.*\2){1})/
          ^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^
          MATCH 2 REPETITIONS  MATCH ONE REPETITION

这是最多两次重复的情况(同一个字符的三次出现)。这样做是找到特定字符((.))的序列的第一个匹配,然后再找到任何东西和那个字符(.*\1),重复两次;换句话说,角色出现三次。如果那不匹配,那么它会找到特定字符序列的第一个匹配,后跟任何东西,然后再重复该字符,重复一次;换句话说,角色出现两次。您可以将其扩展到您希望的最大允许重复次数(9,因为AFAIK反向引用仅支持单个数字)。

如果你在

中使用它
match = 'aabbbcc'.match(regexp)

然后正确答案("b")将在match[1]。如果没有重复,则对match的调用将失败。