使用.match拆分字符串在JavaScript中的for循环中不起作用

时间:2018-01-26 12:02:15

标签: javascript regex string split match

根据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循环中失败?

1 个答案:

答案 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"));