如何检查一个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议么?
提前致谢
你可以使用_.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"); } }
但是,如果你的意思是别的,那就澄清一下。 🙂