Intereting Posts

如何检查一个string是否与node.js中的任何一个正则expression式匹配?

我试图有效地检查一个string是否匹配任何正则expression式的数组,并在第一次遇到的匹配返回true(打破正则expression式的迭代)

我目前的代码:

_.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); } } }); 

兴趣是一系列正则expression式。

有什么build议么?

提前致谢

Solutions Collecting From Web of "如何检查一个string是否与node.js中的任何一个正则expression式匹配?"

你可以使用_.some ,当函数传递返回一个真值时,迭代将停止,并返回true。 如果找不到真值,则在遍历整个数组后,将返回false。

例:

 _.forEach(self._connectedClients, function(client) { if (client.authenticated) { if (_.some(client.interests, _.method('test', evt.event_type))) { self._sendJSON(client.socket, data); } } }); 

只要使用Array#some

some()为数组中的每个元素执行一次callback函数,直到findcallback函数返回一个真值的地方。 如果find这样的元素, some()立即返回true

 var interested = client.interests.some(function(regex) { return regex.test(evt.event_type); }); 

当然你也可以使用lodash的_.some实现。

如果我正确理解你,使用普通的javascript,你可以做以下检查多个正则expression式的单个string匹配 。

 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"); } } 

但是,如果你的意思是别的,那就澄清一下。 🙂