【问题标题】:Javascript: Split Comma Delimited Quoted StringsJavascript:拆分逗号分隔的引号字符串
【发布时间】:2017-01-05 16:27:44
【问题描述】:

我有一个字符串,它本身就是一个逗号分隔的引用字符串列表 - 其中可以有逗号。

例子:

var str = '"long one","short","oh, look","wow.", ""';

我需要把它拆分成一个数组:

['long one', 'short', 'oh, look', 'wow.', '']

// will take this if it is easier
['"long one"', '"short"', '"oh, look"', '"wow."', '""']

我尝试按, 拆分,但它会抛出带有逗号的条目。我也尝试按\", 拆分,但它会创建 lob 边字符串:

['"long one', '"short', '"oh, look', '"wow.', '"']

我尝试按\",\" 拆分,但导致相同的问题,但仅针对第一个和最后一个条目:

['"long one', 'short', 'oh, look', 'wow.', '"']

我还尝试了this answer 中的正则表达式,但它在数组的开头和结尾添加了一个空条目:

['', '"long one"', '"short"', '"oh, look"', '"wow."', '""', '']

有什么建议吗?

谢谢。

【问题讨论】:

  • 为什么不使用你找到的正则表达式然后删除第一个和最后一个元素?
  • 匹配"(.*?)"
  • 这些是否来自 csv 文件?
  • 是的,它们确实来自 CSV 文件。 @MikeC,你是对的,我可以做到。我想我只是不想冒着泄露一些数据的风险——万一没有附加额外的条目
  • 由于引号不会出现在带引号的字符串中,并且您的数据由引号分隔,因此查找所有"([^"]*)" 真的很简单。这是最简单的解决方案。如果您稍后在这个简单的描述中添加警告,则需要更完整的正则表达式。

标签: javascript arrays regex split


【解决方案1】:

您可以将其视为 JSON 字符串的一部分,并附加必要的部分以解析为数组。

var string ='"long one","short","oh, look","wow.", ""',
    array = JSON.parse('[' + string + ']');
console.log(array);

【讨论】:

  • 需要注意的是,其中的任何特殊字符都与 JSON 中的相同 - 制表符、换行符等。例如,如果双引号被转义为双引号而不是 @ 987654322@,那就不行了。
  • 对,那会是个问题,但在问题中看起来不是这样。
  • 感谢@Joe 的提醒。我认为这个解决方案对我的情况来说很好。
  • 是的,这是一个非常好的解决方案。记住边缘情况总是好的。
【解决方案2】:

你可以.split()逗号,字符如果逗号后跟双引号"字符使用RegExp/,(?=")/

str.split(/,(?=")/)

【讨论】:

    【解决方案3】:

    var s = '"long one","short","oh, look","wow.", ""';
    var answer = s.split(/("*,.?")/gi).filter(function (a) {
      return a.replace(/"/g, '').length > 2
    }).map(function (a) {
      return a.replace(/"/g, '')
    });
    console.log(s);
    console.log(answer);

    【讨论】:

      猜你喜欢
      • 2015-03-07
      • 2018-12-21
      • 1970-01-01
      • 1970-01-01
      • 2010-12-17
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      相关资源
      最近更新 更多