Shafizadeh Shafizadeh - 7 months ago 8
Javascript Question

How do I match the numbers sequence rising?

I have a string contains just numbers. Something like this:

var numb = "5136789431235";


And I'm trying to match ascending numbers which are two or more digits. In string above I want this output:

var numb = "5136789431235";
// ^^^^ ^^^


Actually I can match a number which has two or more digits:
/[0-9]{2,}/g
, But I don't know how can I detect being ascending?

Answer

Try this to match consecutive numbers

var matches = [""]; numb.split("").forEach(function(val){ 
  var lastNum = 0;
  if ( matches[matches.length-1].length > 0 )
  {
    lastNum = parseInt(matches[matches.length-1].slice(-1),10);
  }
  var currentNum = parseInt(val,10);
  if ( currentNum == lastNum + 1 ) 
  { 
    matches[matches.length-1] += String(currentNum); 
  }
  else 
  { 
    if ( matches[matches.length-1].length > 1 ) 
    { 
       matches.push(String(currentNum)) 
    } 
    else 
    { matches[matches.length-1] = String(currentNum); 
    } 
  }
});
matches = matches.filter(function(val){ return val.length > 1 }) //outputs ["6789", "123"]

DEMO

var numb = "5136789431235";

var matches = [""]; numb.split("").forEach(function(val){ 
  var lastNum = 0;
  if ( matches[matches.length-1].length > 0 )
  {
    lastNum = parseInt(matches[matches.length-1].slice(-1),10);
  }
  var currentNum = parseInt(val,10);
  if ( currentNum == lastNum + 1 ) 
  { 
    matches[matches.length-1] += String(currentNum); 
  }
  else 
  { 
    if ( matches[matches.length-1].length > 1 ) 
    { 
       matches.push(String(currentNum)) 
    } 
    else 
    { matches[matches.length-1] = String(currentNum); 
    } 
  }
});
matches = matches.filter(function(val){ return val.length > 1 }) //outputs ["6789", "123"]

document.body.innerHTML += JSON.stringify(matches,0,4);

Comments