js正则表达式截取字符串数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js正则表达式截取字符串数组相关的知识,希望对你有一定的参考价值。

var str = 'ssssss w11112131 sssss w22222 asssssssss w33333 sssssssss';

var p = /w\d*/;
var s ="";

s = str.match(p);
alert(s+""+"==="+s[0]+"==="+s[1]+"==="+s[2]+"===");
输出结果 : w11112131===w11112131===undefined===undefined===
我想要的结果 : w11112131===w22222===w33333===
var p = /w\d*/g;
以解决

错了好几个地方啊,第一:正则不是全局的,第二:返回的数组中,第一组(下标为 0 的)为整个正则匹配的结果,第三:js 的正则在匹配成功后就返回,后面的要再次调用!

var str = 'ssssss w11112131 sssss  w22222 asssssssss w33333 sssssssss';

var p = /w\\d*/g;
var s = [], m;

while(m = p.exec(str))
s.push(m[0])

alert("===" + s[0] + "===" + s[1] + "===" + s[2] + "===");

参考技术A 我也想到了,加个g表示全文搜索,不加只搜索一次就返回了。

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

【中文标题】如何检查字符串是不是与 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");
  

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

【讨论】:

以上是关于js正则表达式截取字符串数组的主要内容,如果未能解决你的问题,请参考以下文章

如何用JS正则表达式截取URL的图片名称和后缀

正则截取字符串中(与(前的字符串

正则表达式截取两个指定字符串之间的内容?

正则表达式截取两个指定字符串之间的内容都有哪些?

php正则表达式字符串中提取数字,并截取其中的6位

JS正则截取两个字符串之间的字符串