根据Split large string in n-size chunks in JavaScript中接受的答案,我试图将一个字符串从1分割为它包含的字符数,并将它们推送到一个数组中。
这是我的代码:
function solve(s){
var n = [];
for (var i = 1; i <= s.length; i++) {
n.push(s.match(/.{1,i}/g));
}
return n
};
如果我运行solve("1341");
,则返回[null, null, null, null]
但是,如果我在不使用for循环的情况下编写函数,它就会按照我的意图执行:
function solve(s){
var n = [];
n.push(s.match(/.{1,1}/g));
n.push(s.match(/.{1,2}/g));
n.push(s.match(/.{1,3}/g));
n.push(s.match(/.{1,4}/g));
return n
};
解决( “1341”);返回[["1", "3", "4", "1"], ["13", "41"], ["134", "1"], ["1341"]]
为什么我的代码在for循环中失败?
答案 0 :(得分:1)
在循环i
中是一个变量。当您使用/.{1,i}/
时,请在表达式中插入字母i
,而不是i
的值。要创建包含i
值的正则表达式,请使用字符串连接或模板文字创建字符串,然后使用字符串上的RegExp构造函数或工厂将其转换为表达式:
function solve(s) {
var n = [];
for (var i = 1; i <= s.length; i++) {
n.push(s.match(RegExp('.{1,' + i + '}', 'g')));
}
return n
};
console.log(solve("1341"));