【问题标题】:Split string at different characters into 2d array将不同字符的字符串拆分为二维数组
【发布时间】:2017-11-08 20:28:41
【问题描述】:

当我想在一个字符处拆分一个字符串并将其放入我使用的数组中时:

var arr = data.split("\n");

不过,这一次我需要将字符串拆分为不同的字符,并将其存储到二维数组中。 字符串如下:

PMC12365AB       
PMC23456AB
PMC34567AB

想要的结果

arr = [
    ["PMC", "12365", "AB"],
    ["PMC", "23456", "AB"],
    ["PMC", "34567", "AB"]
];

任何想法

【问题讨论】:

  • 循环遍历从第一次拆分得到的数组,然后拆分单个项目...?
  • 提示:使用map分割数组的每个元素。
  • 您计划在哪个角色上拆分“PMC12365AB”并让它产生["PMC", "12365", "AB"]
  • 您特别困惑的是什么?
  • 你不能尝试运行一个for循环,当字母的ASCII值发生变化时,将它存储在数组中

标签: javascript jquery arrays string


【解决方案1】:
var input = "PMC12365AB\nPMC23456AB\nPMC34567AB";
var output = input.split('\n').map(function(line)
{
    var a = line.match(/^(...)(.....)(..)$/);
    a.shift();
    return a;
});

显然,确切的正则表达式取决于您希望如何剪切每一行,不确定它们是固定宽度还是基于字母与数字...

【讨论】:

  • 为什么是a.shift()
  • 因为match返回的数组的第一个元素是完全匹配,然后是子表达式匹配,这是我们唯一想要的。
  • 正则表达式例如:line.match(/(\w+?)(\d+)(\w+)/)
  • 如果它基于字母/数字/字母,是的。但 OP 并没有具体说明在哪里切割。
【解决方案2】:

我不会在这项工作中使用正则表达式。如果您已经确定文本格式的模式(例如 n 个字母 - m 个数字 - k 个字母),那么您可以简单地使用标准的 JS 字符串操作,例如 substr。但是,如果您想为这段代码提供一点智能,那么您仍然可以通过不接触 regexp 来做到这一点。

var input  = "PMC12365AB\nPMCX2347756AB\nPMC34567ABCT0123";
    result = input.split("\n")
                  .map(s => [].reduce.call(s, (p,c) => isNaN(p[p.length-1]) === isNaN(c) ? p + c : p + "_" + c).split("_"));
console.log(result);

【讨论】:

  • 这正是我想要的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-01-25
  • 2016-10-14
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多