Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 每秒钟匹配一个字符_Javascript_Regex - Fatal编程技术网

Javascript 每秒钟匹配一个字符

Javascript 每秒钟匹配一个字符,javascript,regex,Javascript,Regex,如何将字符串中的每一个字符与正则表达式匹配: 'abcdef'.match(???) => ['a', 'c', 'e'] 我有一个非正则表达式解决方案: spl = []; for(var i = 0; i < str.length; i += 2) spl.push(str.charAt(i)); spl=[];对于(变量i=0;i

如何将字符串中的每一个字符与正则表达式匹配:

'abcdef'.match(???) => ['a', 'c', 'e']
我有一个非正则表达式解决方案:

spl = []; for(var i = 0; i < str.length; i += 2) spl.push(str.charAt(i));
spl=[];对于(变量i=0;i

但是要寻找更优雅的东西。

您可以使用
。?
和(可以通过一个垫片为还没有本机安装的浏览器提供):


您也可以在没有正则表达式的情况下执行此操作

'abcdef'.split("").filter(function(v, i){ return i % 2 === 0; });

如果IE另一种可能的方法:

'abcdefg'.replace(/.(.)?/g, '$1').split('');

它不需要任何垫片。

使用
阵列。prototype.map
也是一个选项:

var oddChars = Array.prototype.map.call('abcdef', function(i,k)
{
    if (k%2===0)
    {
        return i;
    }
}).filter(function(x)
{
    return x;
    //or if falsy values are an option:
    return !(x === undefined);
});

oddChars
现在是
[“a”,“c”,“e”]
..

你确定你需要一个正则表达式吗?同意@fabricio Matté为什么不按字符串的长度迭代并得到charAt(i)?@EliasVanOotegem这主意太棒了<代码>=]
我倾向于使事情过于复杂,哈哈。如果你添加了另一种方法,你可以省去map+过滤器。。。这是不必要的复杂,缓慢,愚蠢和庞大。。。真的很尴尬。。。如果您想看到过度复杂,请告诉我:D@EliasVanOotegem哦,我的错,你指的是你在答案上贴的地图+过滤器,我的错。从jsperf.有趣的思路中删除它。但是我相信正则表达式应该是
/()./g
——OP的输出在第一个字符处匹配,当捕获组不匹配时,不需要替换。聪明的解决方案!您的正则表达式匹配问题标题(“每秒钟匹配一个字符”),因此输出[“b”,“d”]作为OP的示例文本
“abcde”
,但问题文本清楚地表明OP想要[“a”,“c”,“e”](第一个字符和其后的每一个字符)。是的,我的标题有点混乱,但您答对了,谢谢!显然,它可能只是
过滤器
,不需要
映射
'abcdefg'.replace(/.(.)?/g, '$1').split('');
var oddChars = Array.prototype.map.call('abcdef', function(i,k)
{
    if (k%2===0)
    {
        return i;
    }
}).filter(function(x)
{
    return x;
    //or if falsy values are an option:
    return !(x === undefined);
});