【问题标题】:How to check if a string matches any of an array of regexes in node.js?如何检查字符串是否与 node.js 中的任何正则表达式数组匹配?
【发布时间】:2016-02-11 16:59:26
【问题描述】:

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

Interest 是一个正则表达式数组。

有什么建议吗?

提前致谢

【问题讨论】:

  • 那么,您想拥有var regexes = [/a/,/b/,/c/]var string = "teststring" 并查看哪些正则表达式匹配正确?
  • 等等,client.interestsinterest 是一个正则表达式数组吗?
  • @Kristian 我真的不在乎哪一个匹配我只想知道它们是否匹配。 FelixKling client.interests 是正则表达式的数组。
  • 酷,那么我会坚持我的答案提交。

标签: javascript arrays regex node.js lodash


【解决方案1】:

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

示例:

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

【讨论】:

  • .test 是正则表达式上的方法,而不是字符串上的方法。
【解决方案2】:

只需使用Array#some:

some() 对数组中存在的每个元素执行一次回调函数,直到找到一个回调函数返回真值。如果找到这样的元素,some() 立即返回true

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

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

【讨论】:

    【解决方案3】:

    如果我对您的理解正确,请使用纯 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");
      }
    }
    

    但是,如果您的意思是别的,请澄清一下。 :)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-30
      • 1970-01-01
      • 2021-12-18
      • 2011-08-12
      • 2017-10-16
      • 2022-11-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多