如何将字符串中的每个第二个字符与正则表达式匹配:
'abcdef'.match(???) => ['a', 'c', 'e']
我有这个非正则表达式解决方案:
spl = []; for(var i = 0; i < str.length; i += 2) spl.push(str.charAt(i));
但寻找更优雅的东西。
如何将字符串中的每个第二个字符与正则表达式匹配:
'abcdef'.match(???) => ['a', 'c', 'e']
我有这个非正则表达式解决方案:
spl = []; for(var i = 0; i < str.length; i += 2) spl.push(str.charAt(i));
但寻找更优雅的东西。
另一种可能的方法:
'abcdefg'.replace(/.(.)?/g, '$1').split('');
它不需要任何垫片。
您也可以在没有正则表达式的情况下执行此操作。
'abcdef'.split("").filter(function(v, i){ return i % 2 === 0; });
如果 IE<=8 支持是个问题,您可以添加这个 polyfill。
另一种解决方案,更详细但性能更好,不需要垫片:
var str = "abcdef", output = [];
for (var i = 0, l = str.length; i < l; i += 2) {
output.push(str.charAt(i));
}
您可以使用..?
ES5函数map
(可以由 shim 提供给还没有原生浏览器的浏览器):
"abcde".match(/..?/g).map(function(value) { return value.charAt(0); });
// ["a", "c", "e"]
使用Array.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"]
...