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);
});