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

时间:2016-11-26 17:11:06

标签: 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).length == 1)
   {
      match = str[i];
   }
}
console.log(match)

结果应为7(如果我将777放在seqToCompare中,它会起作用),但看起来连接会导致它失败。控制台显示&#34;无法读取null&#34;的属性长度。

您可以在此处进行测试 - https://jsfiddle.net/kwnL7vLs/

我尝试了.toString,设置了Regex格式的seqToCompare,甚至将其解析为int(因为不知道该做什么而绝望......)

2 个答案:

答案 0 :(得分:3)

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

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

RegEx Demo

答案 1 :(得分:0)

anubhava的答案是要走的路,因为它更有效,更简单。但是,如果您想知道为什么您的代码专门出错,那是因为您试图找到返回值length的{​​{1}}属性,即使不匹配也是如此找到了。

请改为尝试:

str.match()