Javascript-在正则表达式中使用连接字符串

Javascript-在正则表达式中使用连接字符串,javascript,regex,Javascript,Regex,我试图找出给定的一串数字是否包含三个相同数字的序列 使用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).le

我试图找出给定的一串数字是否包含三个相同数字的序列

使用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)
var str=“6854777322”

对于(var i=0;i而不是在每个字符上循环,您可以使用简单的正则表达式获取重复3次的数字:

/(\d)(?=\1{2})/
  • (\d)
    -这里我们匹配一个数字并将其分组到捕获的组#1中
  • (?=\1{2})
    是断言相同捕获组的先行,1在当前位置之前重复两次

您可以使用简单的正则表达式获取重复3次的数字,而不是在每个字符上循环:

/(\d)(?=\1{2})/
  • (\d)
    -这里我们匹配一个数字并将其分组到捕获的组#1中
  • (?=\1{2})
    是断言相同捕获组的先行,1在当前位置之前重复两次

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)
var str=“6854777322”

对于(var i=0;ianubhava的答案是可行的,因为它更高效、更简单。但是,如果您想知道为什么代码会给出错误,那是因为您试图找到
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)
var str=“6854777322”

对于(var i=0;iI如果匹配失败,结果是
null
,在第一次迭代中,匹配确实失败了。谢谢!因为进行了比较,我确信它返回了0而不是null。如果匹配失败,结果是
null
,在第一次迭代中,匹配确实失败了。谢谢!我确信它返回了0而不是null,因为e进行了比较。