【问题标题】:Splitting string with .match doesn't work inside a for loop in JavaScript用 .match 分割字符串在 JavaScript 的 for 循环中不起作用
【发布时间】:2018-01-26 12:02:15
【问题描述】:

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

【问题讨论】:

  • 这与循环无关。你的正则表达式不同。

标签: javascript regex string split match


【解决方案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"));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多