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