如何匹配数字序列上升?

时间:2016-04-18 10:41:48

标签: javascript regex

我有一个只包含数字的字符串。像这样:

from("direct:upload-content").to(
            "ftp://{{upload.user}}@{{upload.host}}:{{upload.port}}{{upload.dir}}?password={{upload.pass}}&doneFileName=done.txt");

我正在尝试匹配两位或更多位数的升序数字。在上面的字符串中我想要这个输出:

var numb = "5136789431235";

实际上我可以匹配一个有两位或更多位数的数字:var numb = "5136789431235"; // ^^^^ ^^^ ,但我不知道怎样才能检测到提升?

6 个答案:

答案 0 :(得分:8)

匹配连续数字,例如123

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

RegEx Demo

匹配非连续数字,例如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

以下是一个例子:

var numb = "5136789431235";

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

答案 1 :(得分:2)

你可以通过简单地测试

来做到这一点
01|12|23|34|45|56|67|78|89

此致

答案 2 :(得分:2)

您只需要遍历每个号码并检查下一个号码。然后将这对值添加到结果变量中:

[Shift]+<aMouseCLICK>

这是fiddle

答案 3 :(得分:2)

尝试此选项以匹配连续数字

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"]

<强>样本

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

答案 4 :(得分:1)

你必须使用正则表达式吗?

不确定是否效率最高,但由于它们总是数字,你可以将它们分成数组,然后对其进行算法进行排序吗?

所以喜欢

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

不确定这是否是一种不好的方式,只是另一种思考

的选择

答案 5 :(得分:1)

我使用子字符串方法在 jquery.pwstrength.bootstrap 插件的分支上做了一些不同的事情。

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

我创建了一个包含序列的字符串(&#34; 123456789&#34;)并在大小为3的滑动窗口上扫描序列。

在每次扫描迭代中,我检查字符串上窗口的子字符串:

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

"5136789431235"
          ˆˆˆ