【问题标题】:Detect repeating letter in an string in Javascript在Javascript中检测字符串中的重复字母
【发布时间】:2013-12-11 07:41:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    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 - 它找到第一个匹配字符的重复。

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

    【讨论】:

    • 如果你想要 3 个匹配项,只需输入 \1\1,如果你想要 4 个匹配项,则将 \1\1\1 放在正则表达式中 :)
    • @ MT0 这里是一个关于类似问题的问题。如果我有 x="1001" 并使用 x.match(/(\d)\1+/g) --> 我得到 "00" ...但如果我在没有全局的情况下使用它,我得到两个匹配" 00”和“0”……你能解释一下吗?
    • @carinlynchin 请参阅documentation for match,那里有解释。全局匹配不会只返回匹配的子字符串的捕获组,非全局匹配会返回匹配的子字符串和该子字符串中的捕获组。
    • @MT0 太棒了。谢谢你:)
    • @MT0 当我使用您的解决方案时,我得到:“SyntaxError:在严格模式下不允许八进制转义序列。”。我应该进行哪些更改才能使其正常工作?
    【解决方案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

    【讨论】:

    • 好,这一行中的“g”是什么“ var re = new RegExp("[^"+ str[i] +"]","g"); "
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

      这样的?

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

      编辑:抱歉,刚刚读到您不是在搜索一个函数来查找是否多次找到一个字母,而是查找一个字母是否重复。无论如何,我把这个功能留在这里,也许它可以提供帮助。对不起;)

      【讨论】:

        猜你喜欢
        • 2016-07-06
        • 2015-10-11
        • 2021-06-05
        • 2015-12-02
        • 2017-02-27
        • 2016-02-12
        • 1970-01-01
        • 1970-01-01
        • 2019-12-24
        相关资源
        最近更新 更多