Подтвердить что ты не робот

Как я могу сопоставить последовательность чисел?

У меня строка содержит только числа. Что-то вроде этого:

var numb = "5136789431235";

И я пытаюсь совместить восходящие числа, которые являются двумя или более цифрами. В строке выше я хочу этот вывод:

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

На самом деле, я могу сопоставить число, имеющее две или более цифр: /[0-9]{2,}/g, но я не знаю, как я могу определить, что вы поднимаетесь?

4b9b3361

Ответ 1

Чтобы соответствовать последовательным цифрам, например 123:

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

Демо-версия RegEx


Чтобы соответствовать нескольким числу, например 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


Вот пример:

var numb = "5136789431235";

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

Ответ 2

Вы можете сделать это, просто проверив

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

Привет

Ответ 3

Вам просто нужно пройти через каждый номер и проверить следующий. Затем добавьте эту пару значений к переменной результата:

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

Вот fiddle

Ответ 4

Попробуйте сопоставить последовательные номера

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

Ответ 5

Вам нужно использовать Regex?

Не уверен, что самый эффективный, но поскольку они всегда будут числами, вы могли бы разбить их на массив чисел, а затем выполнить алгоритм для сортировки?

Так нравится

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

Не уверен, что это плохой способ сделать это, просто еще один способ подумать о

Ответ 6

Я сделал что-то другое на развилке из jquery.pwstrength.bootstrap plugin, используя метод подстроки.

https://github.com/andredurao/jquery.pwstrength.bootstrap/commit/614ddf156c2edd974da60a70d4945a1e05ff9d8d

Я создал строку, содержащую последовательность ( "123456789" ), и отсканировал последовательность в скользящем окне размером 3.

На каждой итерации сканирования я проверяю подстроку окна в строке:

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

"5136789431235"
          ˆˆˆ