我有一个array
a =[1,4,'A',3,3,3,5,6,7]
我想通过正则表达式查找a并返回以下结果:
1)是否含有3个一样的成员?如果有,这3个一样的成员是什么?(a中有3个3)
2)是否含有一个5位数的顺序成员?(a中有3,4,5,6,7,应当返回ok,否则no)
请教!
参考GPT和自己的思路:
对于第一个问题,可以利用正则表达式结合数组的filter()函数来实现。具体的代码如下所示:
// 判断是否有3个相同的元素
var reg = /^([^\d]+)?(\d)(\1?\d)(\1?\2\3){0,1}$/;
var result = a.filter(function(item, index, arr) {
var temp = arr.slice(index+1).filter(function(item2){
return item === item2;
});
if (temp.length >= 2) {
return true;
}
}).map(function(item) {
var temp = a.slice(a.indexOf(item)).filter(function(item2) {
return item === item2;
});
if (reg.test(temp.join(''))) {
return temp[0];
}
});
console.log(result);
对于第二个问题,可以利用正则表达式结合数组的join()函数来实现。具体的代码如下所示:
// 判断是否有一个5位数的顺序成员
var reg = /34567/;
var result = reg.test(a.join('')) ? 'ok' : 'no';
console.log(result);
参考GPT和自己的思路:
对于问题1,可以使用正则表达式来匹配。首先将数组转换为字符串,然后使用正则表达式匹配三个相同的数字,并返回这三个数字。代码如下:
let strA = a.toString();
let regex = /(\d)\1{2}/;
let match = regex.exec(strA);
if(match){
console.log('包含三个相同的元素,为:' + match[0]);
}
上述代码中,(\d)
表示匹配数字,\1
表示与第一个括号中匹配的内容相同,{2}
表示重复2次,通过\1{2}
匹配三个相同的数字。其中,match[0]
表示匹配到的整个字符串。
对于问题2,可以先将数组排序,然后比较是否包含3,4,5,6,7。代码如下:
a.sort();
if(a.toString().includes('3,4,5,6,7')){
console.log('含有一个5位数的顺序成员');
} else {
console.log('不含有一个5位数的顺序成员');
}
上述代码中,a.sort()
表示将数组进行升序排序,.toString().includes('3,4,5,6,7')
表示将排序后的数组转换成字符串,并判断是否包含字符串'3,4,5,6,7'。如果包含,则说明该数组包含一个5位数的顺序成员,否则不包含。
正则是处理字符串的,你这一个列表正则怎么处理?
算了,最后for 循环遍历解决问题,但还是感谢大家!