如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?

Posted

技术标签:

【中文标题】如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?【英文标题】: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 是正则表达式的数组。 酷,那么我会坚持我的答案提交。 【参考方案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");
  

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

【讨论】:

以上是关于如何检查字符串是不是与 node.js 中的任何正则表达式数组匹配?的主要内容,如果未能解决你的问题,请参考以下文章

如何检测 HDMI 设备是不是与 Node JS 连接?

如何检查字符串是不是表示正的非零 int?

Node.js:在写入之前检查文件是不是存在[重复]

如何检查数组是不是是Javascript中的空数组数组

如何检查 Node.js 中是不是设置了环境变量?

如何检查用户是不是在 Firebase 和 Express/Node.js 中经过身份验证?