Javascript-在正则表达式中使用连接字符串
我试图找出给定的一串数字是否包含三个相同数字的序列 使用for循环,字符串中的每个数字都会获得自己的三位数序列表示形式,然后使用正则表达式对照字符串进行检查: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
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进行了比较。