最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How do I match the numbers sequence rising? - Stack Overflow

programmeradmin8浏览0评论

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?

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?

Share Improve this question asked Apr 18, 2016 at 10:41 ShafizadehShafizadeh 10.3k15 gold badges58 silver badges92 bronze badges 4
  • 4 Strange... Similar to this question that just was asked. – SamWhan Commented Apr 18, 2016 at 10:50
  • 1 I think writing normal JS would be a much better option.Start with each digit of the the number and run a for loop over its length – Satej S Commented Apr 18, 2016 at 10:54
  • So, it be ascend/descend one 1 only? – gurvinder372 Commented Apr 18, 2016 at 10:57
  • @gurvinder372 Yes ..! (also just ascend not descend) – Shafizadeh Commented Apr 18, 2016 at 10:57
Add a ment  | 

6 Answers 6

Reset to default 8

To match consecutive numbers like 123:

(?:(?=01|12|23|34|45|56|67|78|89)\d)+\d

RegEx Demo


To match nonconsecutive numbers like 137:

(?:(?=0[1-9]|1[2-9]|2[3-9]|3[4-9]|4[5-9]|5[6-9]|6[7-9]|7[8-9]|89)\d)+\d

RegEx Demo


Here is an example:

var numb = "5136789431235";

/* The output of consecutive version:    6789,123
   The output of nonconsecutive version: 136789,1234
*/

You could do this by simply testing for

01|12|23|34|45|56|67|78|89

Regards

You just need to loop through each number and check next one. Then add that pair of values to a result variable:

var numb = "5136789431235";
var res = [];
for (var i = 0, len = numb.length; i < len-1; i++) {
  if (numb[i] < numb[i+1]) res.push(new Array(numb[i],numb[i+1]))
}
res.forEach(function(k){console.log(k)});

Here is fiddle

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

Do you have to use Regex?

Not sure if the most efficient, but since they're always going to be numbers, could you split them up into an array of numbers, and then do an algorithm on that to sort through?

So like

var str = "123456";
var res = str.split("");
// res would equal 1,2,3,4,5,6
// Here do matching algorithm

Not sure if this is a bad way of doing it, just another option to think about

I've did something different on a fork from jquery.pwstrength.bootstrap plugin, using substring method.

https://github./andredurao/jquery.pwstrength.bootstrap/mit/614ddf156c2edd974da60a70d4945a1e05ff9d8d

I've created a string containing the sequence ("123456789") and scanned the sequence on a sliding window of size 3.

On each scan iteration I check for a substring of the window on the string:

var numb = "5136789431235";
//check for substring on 1st window => "123""

"5136789431235"
          ˆˆˆ
发布评论

评论列表(0)

  1. 暂无评论