我在表格中有一个示例元素:
zxcdsa.com/photo-277590-30x24.jpeg
zxcdsa.com/photo2-254654.png
我想拒绝其名称(el.src)中包含例如字符串的元素。 30x30到350x350。我怎么能得到这个效果? 使用以下方法过滤元素:
var newArray = someImages.filter(function (el) {
const min = 400;
const max = 700;
const delimiter = 'x';
return el.width >= 400 ||
el.class.indexOf('post-image') > -1 ||
el.src.match( /\d+x\d+/ )[ 0 ]
.split( delimiter )
.every( ( number ) => {
return number >= min && number <= max;
});
....
});
当match()
找不到该项时,此代码无效。
示例:
29x200
=&gt;拒绝200x220
=&gt;接受YYxYY
=&gt;接受答案 0 :(得分:1)
当.match()
找不到匹配项时,它会返回null
,而不是数组,因此您无法使用[0]
对其进行索引。因此,您需要将其分解为变量赋值,测试它不为空,其余部分。
您还可以在正则表达式中使用捕获组,以避免必须调用split()
。
var newArray = someImages.filter(function (el) {
return el.width >= 400 ||
el.class.indexOf('post-image') > -1 ||
((m = el.src.match( /(\d+)x(\d+)/ )) &&
[m[1], m[2]].every( number => number >= min && number <= max))
....
});
答案 1 :(得分:0)
认为你让自己变得困难。
逻辑上,将字符串拆分为数组,然后获取数字,如果它们可被10整除,则允许,如果不能,则禁止