如何检查字符串是否与node.js中的任何一个正则表达式匹配?

时间:2015-11-10 17:50:56

标签: javascript arrays regex node.js lodash

我试图有效地检查一个字符串是否匹配任何一个正则表达式并在第一个遇到的匹配中返回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);
            }
        }
    });

兴趣是一系列正则表达式。

有什么建议吗?

提前致谢

3 个答案:

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

但是,如果您有其他意思,那么请澄清一下。 :)