2016-11-26 82 views
0

我试图找到给定的数字串是否包含三个相同数字的序列。Javascript - 在正则表达式中使用连接字符串

使用for循环,字符串中的每个数字都有自己的一个三位数的序列,然后使用正则表达式检查对字符串的表示:

var str = "6854777322" 

for(var i=0; i<str.length; i++) 
{ 
    seqToCompare = str[i] + str[i] + str[i]; 
    var re = new RegExp(seqToCompare, "g"); 
    if(str.match(re).length == 1) 
    { 
     match = str[i]; 
    } 
} 
console.log(match) 

结果应该是七(如果我把777在seqToCompare,它会工作),但它看起来像串联导致它失败。控制台显示“无法读取null的属性长度”。

你可以在这里进行测试 - https://jsfiddle.net/kwnL7vLs/

我试过的ToString,在正则表达式的格式设置seqToCompare甚至解析它作为INT(出于绝望了,不知道该怎么办了......)

+0

如果匹配失败,结果是'null'并在第一次循环,对手失败。 – vlaz

+0

谢谢!我确定它返回** 0 **而不是** null **,因为比较发生了。 –

回答

3

而不是遍历每个字符,你可以使用一个简单的正则表达式来获取重复3次位:

/(\d)(?=\1{2})/ 
  • (\d) - 在这里,我们匹配一个数字和组它捕获组#1
  • (?=\1{2})是先行断言同捕获组#1重复前面的当前位置的两倍

RegEx Demo

+0

@NiviM这工作完成了吗? – anubhava

0

anubhava的答案是要走的路,因为它更高效和简单。但是,如果您想知道为什么您的代码特别错误,那是因为您尝试查找返回值为str.match()length属性,即使未找到匹配项也是如此。

试试这个:

var str = "6854777322" 

for(var i=0; i<str.length; i++) 
{ 
    seqToCompare = str[i] + str[i] + str[i]; 
    var re = new RegExp(seqToCompare, "g"); 
    if(str.match(re)) 
    { 
     match = str[i]; 
    } 
} 
console.log(match) 
相关问题