【问题标题】:The first digit matches the last digit in a four-digits number第一位数字与四位数字中的最后一位数字匹配
【发布时间】:2019-12-19 04:42:22
【问题描述】:

我正在尝试查找以相同数字开头和结尾并且在两个数字之间具有相似数字的数字。下面是一些例子:

7007 1551 3993 5115 9889  

我尝试了以下正则表达式来识别第一个和最后一个数字。但是,没有选择任何号码。

^(\d{1})\1$

感谢您的帮助。

【问题讨论】:

    标签: regex regular-language


    【解决方案1】:

    使用这个:

    (\d)(\d)\2+\1

    分别捕获第一位和第二位数字,然后以相反的顺序匹配它们。

    Demo

    【讨论】:

    • 你应该以某种方式用单词边界标记包装你的正则表达式,比如\b(\d)(\d)\2+\1\b
    【解决方案2】:

    也许,

    ^(\d)(\d)\2+\1$
    

    可能是一个选择。

    RegEx Demo


    如果您希望简化/更新/探索表达式,已在regex101.com 的右上角面板中进行了说明。如果您有兴趣,可以在this debugger link 中观看匹配步骤或修改它们。调试器演示了a RegEx engine 如何逐步消耗一些示例输入字符串并执行匹配过程。


    【讨论】:

      【解决方案3】:

      您的正则表达式将匹配两位数字相同的数字。你只需要扩展它:(\d)(\d)\2\1

      此外,由于数字位于同一行,因此请使用字边界 (\b) 而不是行边界(^$)。

      \b(\d)(\d)\2\1\b
      

      顺便说一句,{1} 是多余的

      Demo on regex101

      【讨论】:

        【解决方案4】:

        简单的JS方式。

        let a = "7007 1551 3393 5115 9883";
        a = a.split(" ");
        
        let ans = [];
        
        a.forEach((val) => {
        
          let temp = val.split("");
          if (temp && temp[0] === temp[temp.length - 1]) {    
            temp = temp.slice(1,temp.length-1);
          ans.push(temp.slice(0,temp.length).every( (val, i, arr) => val === arr[0] )) ;
          } else {
            ans.push(false);
          }
        
        });
        
        console.log(ans);

        正则表达式:

        let a = "7007 1551 3393 5115 9883";
        
        a = a.split(" ");
        
        let ans = [];
        
        a.forEach((val) => {
        
          let reg = /(\d)(\d*)(\d)/gi;
          let match = reg.exec(val);
          if (match && match.length > 3 && match[1] === match[3]) {
            let temp = match[2];
              temp = temp.split("");
              temp = temp.slice(0,temp.length);
             ans.push(temp.every( (val, i, arr) => val === arr[0] )) ;
          } else {
            ans.push(false);
          }
        
        });
        console.log(ans);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-03-08
          • 2021-10-14
          • 1970-01-01
          • 2022-01-08
          • 2021-01-27
          • 1970-01-01
          • 1970-01-01
          • 2013-06-13
          相关资源
          最近更新 更多