如何使用javascript查找字符串中是否包含特定数量的连续数字?
假设我想知道一个字符串是否包含5个或更多连续数字如何使用javascript查找字符串中是否包含特定数量的连续数字?,javascript,regex,Javascript,Regex,假设我想知道一个字符串是否包含5个或更多连续数字 var a = "ac39270982"; // False var a = "000223344998"; // False var a = "512345jj7"; // True - it contains 12345 var a = "aa456780"; // True - it contains 45678 是否有可用的正则表达式来实现这一点?它是否也能在以下情况下工作 var a = "5111213141587"; // Tru
var a = "ac39270982"; // False
var a = "000223344998"; // False
var a = "512345jj7"; // True - it contains 12345
var a = "aa456780"; // True - it contains 45678
是否有可用的正则表达式来实现这一点?它是否也能在以下情况下工作
var a = "5111213141587"; // True
这应该是真的,因为它包含11,12,13,14,15
我不确定是否可以检查所提供的示例(一位数、两位数)以及更大的数字(三位数等)。我花时间对您的问题进行了100%的Javascript处理。我只是简单地解析字符串中的每个字符,并进行仅限整数的比较。这不仅适用于五个连续整数,还适用于检查十分之一(10、20等)。如果愿意,还可以增加/减少比较次数 一个合理的警告:尽管这种方法如果编码为查找所有类型的数字大小,可能具有可扩展性,但您仍然会受到计算能力和比较次数的限制。这就是为什么我只提供了一位数和十分之一的代码,我让您/社区决定如何从这里扩展 如果你碰巧需要更多关于它如何工作的细节,请告诉我,我可以进一步澄清它的内部工作原理
var str = "1111122asdgas222*&^%121314151617bdjfjahdi234bdce56789";
var consecutive = 5; // Number of comparisons
// Single digits
alert("It is " + consecutiveDigits(str, consecutive) + " that " + str + " contains " + consecutive + " consecutive digits.");
// Tenths digits
alert("It is " + consecutiveDigits(str, consecutive) + " that " + str + " contains " + consecutive + " consecutive tenths.");
function consecutiveDigits(str, consecutive){
var curr,
prev,
count = 0;
for(var i = 0; i < str.length; ++i) {
curr = parseInt(str.split('')[i]);
if(isNumeric(curr)) {
if(count === 0){
++count;
}
else if(prev + 1 === curr){
++count;
if(count === consecutive){
return true;
}
}
prev = curr;
}
}
return false;
}
function consecutiveTenths(str, consecutive, iterations){
var curr,
prev,
curr_tenth = 0,
prev_tenth = 0,
count = 0,
count_tenth = 0;
for(var i = 0; i < str.length; ++i) {
curr = parseInt(str.split('')[i]);
if(isNumeric(curr)) {
++count;
if(count === iterations){
curr_digit = (prev * 10) + curr;
alert(count_digit + " " + curr_digit + " " + prev_tenth);
if(count_digit === 0){
++count_digit;
}
else if(curr_tenth === (prev_tenth + 1)){
++count_digit;
if(count_digit === consecutive){
return true;
}
}
prev_digit = curr_digit;
count = 0;
}
else {
prev = curr;
}
}
else {
count = 0;
}
}
}
function isNumeric(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
var str=“11111 22ASDGAS222*&^%121314151617bdjfjahdi234bdce56789”;
连续变量=5;//比较次数
//个位数
警报(“正是“+str+”包含“+连续+”连续数字“+”);
//十分之一位数
警报(“正是“+continuousedigits(str,continuoused)+”+str+“包含”+continuoused+“continuoused十分之一”);
函数连续数字(str,连续){
var curr,
前,
计数=0;
对于(变量i=0;i
您可以构建regexp来验证它是否为真,但您可能很难检索整个连续字符串。也就是说RegExp有点麻烦,但是您可以创建一个函数来创建所需的RegExp,具体取决于所需的参数。请参阅代码片段:
函数构建\u regexp(n){
var字符串=”;
对于(var i=0;i编辑:在numRegex中添加了一个代码片段并修复了错误
要回答一般情况(即任意长度数字的连续序列),可以执行以下操作:
/*在输入中查找n>1个连续递增的整数序列
*
*如果找到序列,则返回一个对象:
* {
*开始:,
*长度:,
*第一:
* }
*
*否则,返回null
*/
函数查找顺序(输入,n){
var numRegex=/^(?:0 |[1-9][0-9]*)$/;
//尝试每个起始位置
对于(变量i=0;i1&&input.length){
var结果=findSequence(输入,n);
如果(结果){
$('#result').text(JSON.stringify(result,null,2));
var afterFirst=result.start+result.first.length;
var afterSeq=result.start+result.length;
$(“#突出显示”).empty()
.append($('')
.text(input.slice(0,result.start)))
.append($('')
.addClass('序列')
.append($('')
.addClass('first')
(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){4,}\d
(?:(\d)(?:0(?=(?:\1)1)|1(?=(?:\1)2)|2(?=(?:\1)3)|3(?=(?:\1)4)|4(?=(?:\1)5)|5(?=(?:\1)6)|6(?=(?:\1)7)|7(?=(?:\1)8)|8(?=(?:\1)9))|09(?=10)|19(?=20)|29(?=30)|39(?=40)|49(?=50)|59(?=60)|69(?=70)|79(?=80)|89(?=90)){4,}\d{2}
(?:(\d{2})(?:0(?=(?:\1)1)|1(?=(?:\1)2)|2(?=(?:\1)3)|3(?=(?:\1)4)|4(?=(?:\1)5)|5(?=(?:\1)6)|6(?=(?:\1)7)|7(?=(?:\1)8)|8(?=(?:\1)9))|(\d)(?:09(?=(?:\2)10)|19(?=(?:\2)20)|29(?=(?:\2)30)|39(?=(?:\2)40)|49(?=(?:\2)50)|59(?=(?:\2)60)|69(?=(?:\2)70)|79(?=(?:\2)80)|89(?=(?:\2)90))|099(?=100)|199(?=200)|299(?=300)|399(?=400)|499(?=500)|599(?=600)|699(?=700)|799(?=800)|899(?=900)){4,}\d{3}
(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)){4,}\d|(?:(\d)(?:0(?=(?:\1)1)|1(?=(?:\1)2)|2(?=(?:\1)3)|3(?=(?:\1)4)|4(?=(?:\1)5)|5(?=(?:\1)6)|6(?=(?:\1)7)|7(?=(?:\1)8)|8(?=(?:\1)9))|09(?=10)|19(?=20)|29(?=30)|39(?=40)|49(?=50)|59(?=60)|69(?=70)|79(?=80)|89(?=90)){4,}\d{2}|(?:(\d{2})(?:0(?=(?:\2)1)|1(?=(?:\2)2)|2(?=(?:\2)3)|3(?=(?:\2)4)|4(?=(?:\2)5)|5(?=(?:\2)6)|6(?=(?:\2)7)|7(?=(?:\2)8)|8(?=(?:\2)9))|(\d)(?:09(?=(?:\3)10)|19(?=(?:\3)20)|29(?=(?:\3)30)|39(?=(?:\3)40)|49(?=(?:\3)50)|59(?=(?:\3)60)|69(?=(?:\3)70)|79(?=(?:\3)80)|89(?=(?:\3)90))|099(?=100)|199(?=200)|299(?=300)|399(?=400)|499(?=500)|599(?=600)|699(?=700)|799(?=800)|899(?=900)){4,}\d{3}