【问题标题】:Split but respect comma names拆分但尊重逗号名称
【发布时间】:2018-08-22 23:11:21
【问题描述】:

我的代码有点问题。 我有一个需要分隔和解析的单词列表,而不是列中的行。

这段代码实际上工作得很好,并且完成了这项工作。 实际工作情况如何:

const Obj = {
    "0":"Mario, Louigi, Peach",
    "1":"Wario, King Kong, Bomberman",
    "2":"Dracula, Doctor Z, Raikou"
};

const Obj3 = [];

var count = Obj[0].split(", ").length;
var countOuter = Object.keys(Obj).length;

for( var i = 0; i < count; i++){
  
  var string = [];
  
  for( var j = 0; j < countOuter; j++){
    string.push(Obj[j].split(", ")[i]);
  }
  
  Obj3[i] = string;
}

console.log(Obj3);

但是,如果任何名称在中间示例中包含逗号:Mr, Robot,它会将逗号视为分隔符,并将 Mr, Robot 一分为二而不是一。

例子:

    const Obj = {
        "0":"Mr, Robot, Louigi, Peach",
        "1":"Wario, King Kong, Bomberman",
        "2":"Dracula, Doctor Z, Raikou"
    };

    const Obj3 = [];

    var count = Obj[0].split(", ").length;
    var countOuter = Object.keys(Obj).length;

    for( var i = 0; i < count; i++){
      
      var string = [];
      
      for( var j = 0; j < countOuter; j++){
        string.push(Obj[j].split(", ")[i]);
      }
      
      Obj3[i] = string;
    }

    console.log(Obj3);

然后它会创建一个未定义的记录,导致我出错。 知道如何解决这个问题吗? 提前致谢!!

【问题讨论】:

  • 数组的第一个索引上有四个逗号分隔的字符串,数组的其余部分有三个逗号分隔的字符串。
  • 你控制Obj中的数据格式吗?
  • @t0mm13b 是的,我知道这就是我寻求帮助的原因。即使数组的第一个索引上有 4 个逗号,其中一个也是“假”逗号。有任何想法吗?谢谢!
  • @JohanP 感谢您的回答,Obj 是 strings.map(item => (item.value)); 的结果
  • 您必须转义您的项目,通常使用"" 以便您可以确定单词边界。即"Mr, Robot", "Mario" 然后寻找一些正则表达式,除了""

标签: javascript string split fuse


【解决方案1】:

如果在逗号连接之前无法获取名称,则可以使用正则表达式分隔符来拆分它们。例如,如果在逗号前面只有两个非空白字符就足够了,您可以使用:

.split(/(?<=[^ ,]{3,}), /)

此正则表达式将匹配 ', ',前提是它前面至少有 3 个不匹配 ' '',' 的字符。

【讨论】:

  • “如果不以逗号分隔就足够了,前面只有两个非空白字符”似乎不是一个合理的假设。
  • 您好@user3088089,非常感谢您的提示。实际上,如果我在地图和所有代码之前执行 console.log 它看起来像这样: (3) [{…}, {…}, {…}]0: {key: "Field 1", value: "Mr , Robot, Wario"}1: {key: "Field 2", value: "Louigi, King Kong"}2: {key: "Field 3", value: "Peach, Bomberman"}length: 3__proto__: Array(0 )
  • @DanielBeck 显然,首选的解决方案是使名称不连接,或者由名称本身不存在的分隔符连接。如果不可能,则提供此答案作为可能的解决方法。
  • @K3ny1如果是这种情况,那么也许您只能在最后一个逗号处拆分。可能是这样的:.split(/, (?=[^,]+$)/)
猜你喜欢
  • 2011-09-07
  • 2015-03-07
  • 2020-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-08
  • 1970-01-01
相关资源
最近更新 更多