【问题标题】:Javascript replace every 6th colon in arrayJavascript替换数组中的每6个冒号
【发布时间】:2017-08-28 02:10:33
【问题描述】:

我在替换数组中的每 6 个冒号时遇到了一些问题。已尝试使用 Regex 进行某些操作,但这似乎不起作用。我有红色的其他问题是人们正在使用 nth 然后将此变量设置为您要替换的索引,但无法弄清楚为什么这不起作用。我使用 join 函数将数组中的 ',' 替换为 ':'。

arrayProducts[i] = arrayProducts[i].join(':');

当我使用console.log(arrayProducts); 这是我的结果:

F200:0:0.0000:1:100:0:1:KPO2:0:0.0000:1:200:0:2:HGB1:0:0.0000:1:300:0:3

这就是我想要的:

F200:0:0.0000:1:100:0:1,KPO2:0:0.0000:1:200:0:2,HGB1:0:0.0000:1:300:0:3

感谢阅读!

编辑:F200、KP02 和 HGB1,也可以是数字/数字,例如:210、89、102,因此正则表达式中的 :[A-Z] 方法不起作用。

【问题讨论】:

标签: javascript arrays replace


【解决方案1】:

您正在寻找的是拆分以下表达式:[A-Z] (假设你的行总是从这个范围开始)

一个简单的解决方案可能是:

mystring.split(/:[A-Z]/).join(',')

/:[A-Z]/ 匹配任何: 后跟一个大写字母

【讨论】:

  • 好吧,那是我以前用过的。问题是 F200、KP02 和 HGB1 也可能是:112、141、5
  • 所以你应该在你的问题中提到这一点:),以获得更好的结果
【解决方案2】:

正则表达式解决方案是可行的。您可以使用函数作为 .replace 方法的第二个参数,以充分利用反向引用。

var str = 'F200:0:0.0000:1:100:0:1:KPO2:0:0.0000:1:200:0:2:HGB1:0:0.0000:1:300:0:3';

str = str.replace(/((?:[^:]*:){6}(?:[^:]*)):/g, function() {
    var matches = arguments;
    return matches[1] + ',';
});

console.log(str);

【讨论】:

    【解决方案3】:

    也许你可以试试这个方法, 循环您的数组并手动加入它,例如:

         var strarr = "F200:0:00000:1:100:0:1:KPO2:0:00000:1:200:0:2:HGB1:0:00000:1:300:0:3";
         var arr = strarr.split(":")
    
          var resStr = "";
    
           for(var i = 0; i < arr.length; i++)
           {
               if(i > 0 && i%7 == 0)
                   resStr = resStr + ","  + arr[i]
               else
                   resStr =  resStr + ( resStr == "" ? "" : ":") + arr[i];
            }
    
            console.log(resStr);
    

    【讨论】:

      【解决方案4】:

      您可以使用替换来查找带有冒号的六个部分并替换第七个。

      var string = 'F200:0:0.0000:1:100:0:1:KPO2:0:0.0000:1:200:0:2:HGB1:0:0.0000:1:300:0:3',
          result = string.replace(/(([^:]*:){6}[^:]*):/g, '$1,');
      
      console.log(result);

      【讨论】:

        【解决方案5】:

        您可以只计算冒号出现的次数并替换每 n 个冒号。

        var str = 'F200:0:0.0000:1:100:0:1:KPO2:0:0.0000:1:200:0:2:HGB1:0:0.0000:1:300:0:3', counter = 0;
            res = str.replace(/:/g, function(v) {
              counter++;
              return !(counter % 7) ? ',' : v;
            });
        
            console.log(res);

        【讨论】:

          【解决方案6】:

          另一种解决方案(根据迭代次数)

          使用地图方法:

          str.split(':').map((v, i) => (i % 7 === 0 ? ',' : ':') + v ).join('').slice(1)
          

          使用reduce方法:

          str.split(':').reduce((acc,v, i) =>  {    
              return acc +  (i % 7 === 0 ? ',' : ':' ) + v ;
          }, '').slice(1)
          

          注意:箭头表达式不适用于旧浏览器

          【讨论】:

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