我试图有效地检查一个字符串是否匹配任何一个正则表达式并在第一个遇到的匹配中返回true(在正则表达式上打破迭代)
我目前的代码:
_.forEach(self._connectedClients, function(client) {
if (client.authenticated) {
var interested = _.forEach(client.interests, function(interest) {
if (evt.event_type.search(interest) != -1) {
return true;
}
});
if (interested) {
self._sendJSON(client.socket, data);
}
}
});
兴趣是一系列正则表达式。
有什么建议吗?
提前致谢
答案 0 :(得分:4)
你可以使用_.some
,当传递的函数返回一个truthy值时,迭代将停止并返回true。如果它找不到真值,那么在迭代整个数组后它将返回false。
实施例:
_.forEach(self._connectedClients, function(client) {
if (client.authenticated) {
if (_.some(client.interests, _.method('test', evt.event_type))) {
self._sendJSON(client.socket, data);
}
}
});
答案 1 :(得分:3)
只需使用Array#some
:
some()
对数组中存在的每个元素执行一次回调函数,直到找到一个回调返回true值的元素。如果找到这样的元素,some()
会立即返回true
。
var interested = client.interests.some(function(regex) {
return regex.test(evt.event_type);
});
当然,您也可以使用lodash _.some
实施。
答案 2 :(得分:0)
如果我使用普通的javascript正确理解您,您可以执行以下操作来检查matches of a single string over multiple regular expressions。
for(var i = 0; i<x.length; i++) {
var regex = x[i]; console.log('regex', regex);
if( str.match( x[i] ) ) {
console.log("regex:",x[i]," matching: true");
} else {
console.log("regex:",x[i]," matching: false");
}
}
但是,如果您有其他意思,那么请澄清一下。 :)