检查多个字符串是否匹配多个正则表达式(两个数组)
Check multiple strings for matching multiple regex (both array)
我需要检查数组(字符串)的所有元素是否匹配任何正则表达式,正则表达式也存储在数组中。
那么这里是字符串数组和和正则表达式数组(在这个例子中,所有三个元素都是相同的正则表达式-我知道这没有意义):
let array = [ 'just some', 'strings', 'which should be tested', 'by regex' ];
let regexes = [ /([^.]+)[.'s]*/g, /([^.]+)[.'s]*/g, /([^.]+)[.'s]*/g ];
现在我要做两个这样的_.each
循环:
_.each(array, function(element) {
_.each(regexes, function(regex) {
let match = regex.exec(element);
if (match && match.length)
doSomething(match);
});
});
但是我想要实现的是,如果只有一个正则表达式匹配,我想处理这个字符串。因此,对于这个无意义的正则表达式数组,这种情况永远不会发生,因为将没有或三个匹配的正则表达式。
此外,我想知道是否有可能避免这种嵌套的each循环。
的例子:
let array = [ '1. string', 'word', '123' ]
let regexes = [/([a-z]+)/, /([0-9]+)/]
array[0] should NOT pass the test, as both regex are matching
array[1] should pass the test, as just ONE regex is matching
array[2] should pass the test, as just ONE regex is matching
,因此只有数组[1]和数组[2]的结果应该用于进一步处理doSomething(match)
您可以使用Array#reduce
并计算匹配。如果count
等于1
,则继续处理。
var array = ['1. string', 'word', '123'],
regexes = [/([a-z]+)/, /([0-9]+)/];
array.forEach(function (a) {
var match,
count = regexes.reduce(function (count, r) {
var test = r.exec(a);
if (!test) {
return count;
}
match = test;
return count + 1;
}, 0);
count === 1 && console.log(match);
});
可以合并Array.prototype.filter
和Array.prototype.every
:
let array = ['1. string', 'word', '123'],
regexes = [/([a-z]+)/, /([0-9]+)/];
var result = array.filter(str => {
var count = 0;
return regexes.every(reg => {
reg.test(str) && count++;
return count <= 1;
});
});
console.log(result)
相关文章:
- 如何使用 node.js 比较两个 json 数组
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 访问$.ajax()函数中的两个不同数组
- 正在更新mongod中两个对象内部的数组
- 如何使用javascript合并两个对象数组
- 比较包含多个值对的两个JavaScript数组
- jQuery对象从html表中查询为两个一维数组,用于Chartist图表
- 检查来自不同数组的两个元素的一个属性是否相等
- 如何在javascript中合并两个对象数组
- 如何获取数组第一个元素的范围
- 捕获一组两个特殊字符之间的所有内容,但允许角色在正文中出现一次
- 使用具有不同属性数的两个或多个着色器时发生冲突
- JSON数组-多个有效答案的可能性
- 编写一个函数,将数组(第一个参数)拆分为大小(第二个参数)的长度组,并将它们作为多维数组返回
- 如何添加值到javascript数组两次或更多
- 使用.shift()更新数组'5个元素
- JavaScript 过滤器数组多个条件
- 如果数组第一个元素中的字符串包含数组第二个元素中字符串的所有字母,则返回true
- Javascript序列化数组多个表单问题
- 编写一个函数,将数组(第一个参数)拆分为大小相同的组(第二个参数),并将其作为多维数组返回