在Javascript中检测字符串中的重复字母

时间:2013-12-11 07:41:01

标签: javascript regex

用于检测字符串中重复字母的代码。

var str="paraven4sr";
var hasDuplicates = (/([a-zA-Z])\1+$/).test(str)        
alert("repeating string "+hasDuplicates);

我收到“ false”作为上述字符串“ paraven4sr ”的输出。但是这个代码对于像 paraaven4sr这样的字符串正常工作。我的意思是如果字符连续重复,代码会将输出显示为“ TRUE”。如何重写此代码,以便当字符在字符串中重复时输出为“ TRUE”

4 个答案:

答案 0 :(得分:23)

JSFIDDLE

var str="paraven4sr";
var hasDuplicates = (/([a-zA-Z]).*?\1/).test(str)        
alert("repeating string "+hasDuplicates);

正则表达式/([a-zA-Z])\1+$/正在寻找:

  • ([a-zA-Z]]) - 它在第一组中捕获的一封信;然后
  • \1+ - 紧接着它的一封或多份副本;然后
  • $ - 字符串的结尾。

将其更改为/([a-zA-Z]).*?\1/而不是搜索:

  • ([a-zA-Z]) - 它在第一组中捕获的一封信;然后
  • .*? - 零个或多个字符(?表示尽可能少);直到
  • \1 - 它找到第一个匹配字符的重复。

如果您要求第二个匹配项必须位于字符串末尾,那么您可以将$添加到正则表达式的末尾,但是可以从您想要的文本描述中添加{{1}}似乎没有必要。

答案 1 :(得分:2)

试试这个:

var str = "paraven4sr";
function checkDuplicate(str){
    for(var i = 0; i < str.length; i++){
        var re = new RegExp("[^"+ str[i] +"]","g");
        if(str.replace(re, "").length >= 2){
            return true;
        }
    }
    return false;
}
alert(checkDuplicate(str));

这是jsfiddle

答案 2 :(得分:1)

只测试重复的字母数字字符(包括下划线_):

console.log(/(\w)\1+/.test('aab'));

答案 3 :(得分:0)

这样的东西?

String.prototype.count=function(s1) { 
   return (this.length - this.replace(new RegExp(s1,"g"), '').length) / s1.length;
}

"aab".count("a") > 1

编辑:对不起,只是看到你没有在搜索函数来查找是否多次找到一封信,而是查找一封信是否重复。无论如何,我把这个功能留在这里,也许它可以帮助你。对不起;)