代码之家  ›  专栏  ›  技术社区  ›  Manually Overridden

regex匹配末尾有n个重复数字的数字

  •  2
  • Manually Overridden  · 技术社区  · 8 年前

    我想匹配在javascript中结尾有N个重复数字的数字。但是,我的regex在结尾处匹配n个或多个n位,我似乎无法解决这个问题。
    即n=3,匹配这些: 12333 222 1233334333

    不匹配: 11 12344 122233 123333

    我的注册表(不工作):
    (\d)\1{2}$ [^\1](\d)\1{2}$ (\d){3}(?!\1)$

    3 回复  |  直到 8 年前
        1
  •  3
  •   CertainPerformance    8 年前

    尝试此操作-在重复数字开始之前匹配数字,对所述数字使用负向前看,然后匹配3个重复数字:

    const strs = [
    '12333',
    '222',
    '1233334333',
    '11',
    '12344',
    '123333'];
    const re = /(^|(\d)(?!\2))(\d)\3{2}$/;
    strs.forEach(str => {
      if (re.test(str)) console.log('pass ' + str);
    });
        2
  •  0
  •   kabanus    8 年前

    /[^1]1{3}$|[^2]2{3}$|[^3]3{3}$|.../gm
    

    ... 每个数字的平均重复次数。您可以很容易地用循环生成这个表达式,如果愿意,还可以对第一个非系列数字使用负查找。

    fiddle

        3
  •  0
  •   n3ko    8 年前

    虽然这个表达式几乎可以解决您的需要(它给出4次或更多次重复的假阳性),也许这也可以修复…我建议用no或者不仅仅用regex来解决这个问题。可能是一个[0-9]n和一个精确的重复检查,字符串上有一个向后循环。

    let re= /1{3}$|2{3}$|3{3}$|4{3}$|5{3}$|6{3}$|7{3}$|8{3}$|9{3}$|0{3}$/;
    
    var div = document.getElementById('out');
    
    div.innerHTML += "12333".match(re)+" -- <br/>"
    div.innerHTML += "222".match(re) +" -- <br/>"
    div.innerHTML += "1233334333".match(re) +" -- <br/>"
    
    // Not match these:
    div.innerHTML += "11".match(re) +" -- <br/>"
    div.innerHTML += "12344".match(re) +" -- <br/>"
    div.innerHTML += "122233".match(re)+" -- <br/>"
    div.innerHTML += "123333".match(re)+" -- <br/>"
    <div id=out></div>