Sami
Sami

Reputation: 13

The first digit matches the last digit in a four-digits number

I'm trying to find numbers that start and end with the same digit and have similar numbers in between the two digits. Here are some examples:

7007 1551 3993 5115 9889  

I tried the following regular expression to identify the first and the last digit. However, no number was selected.

^(\d{1})\1$

I appreciate your help.

Upvotes: 1

Views: 588

Answers (4)

CinCout
CinCout

Reputation: 9619

Use this:

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

Capture the first and second digits separately, then match them in the reverse order.

Demo

Upvotes: 2

Akshay Bande
Akshay Bande

Reputation: 2587

Simple JS way.

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);

Regular Expression:

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);

Upvotes: 1

Emma
Emma

Reputation: 27743

Maybe,

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

might be an option to look into.

RegEx Demo


If you wish to simplify/update/explore the expression, it's been explained on the top right panel of regex101.com. You can watch the matching steps or modify them in this debugger link, if you'd be interested. The debugger demonstrates that how a RegEx engine might step by step consume some sample input strings and would perform the matching process.


Upvotes: 2

wjandrea
wjandrea

Reputation: 33145

Your regex will match two digit numbers where both digits are the same. You just need to expand it: (\d)(\d)\2\1

As well, since the numbers are on the same line, use word boundaries (\b) instead of line boundaries (^ and $).

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

BTW {1} is redundant

Demo on regex101

Upvotes: 1

Related Questions