首位数字与四位数数字中的最后一位数字匹配

时间:2019-12-19 04:42:22

标签: regex regular-language

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

7007 1551 3993 5115 9889  

我尝试了以下正则表达式来标识第一位和最后一位。但是,没有选择号码。

^(\d{1})\1$

感谢您的帮助。

4 个答案:

答案 0 :(得分:2)

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

同样,由于数字在同一行上,因此请使用单词边界(\b)而不是行边界(^$)。

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

BTW {1}是多余的

Demo on regex101

答案 1 :(得分:2)

使用此:

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

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

Demo

答案 2 :(得分:1)

也许

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

可能是一种选择。

RegEx Demo


如果您想简化/更新/探索表达式,请在regex101.com的右上角进行解释。如果您有兴趣,可以观看匹配的步骤或在this debugger link中进行修改。调试器演示了a RegEx engine如何逐步使用一些示例输入字符串并执行匹配过程的过程。


答案 3 :(得分:1)

简单的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);